[BCB] Przeszukiwainie kodu HTML...

0

Mam takie pytanie: mam jakiś tekst powiedzmy że jest to kod HTML stronki i chce z niego wyciągnąć wszystkie adresy e-mail. Pomyślalem tak że musze najpierw znaleŹć słówko mailto: i po tym słowie odczytać maila tylko nie wiem jak sprawdzić kiedy ten mail sie kończy :-|. To z mailem to tylko przykład po prostu chciałbym wiedzieć jak napisać algorytm który wyszukiwaw by jakiś tekst i miałby podane 2 inne słowa. kod miałby zwracać tekst znajdujący sie między dwoma innymi słowami... starałem sie to wyjaśnić dość prosto al enie wiem czy mnie zrozumiecie :/ prosze o pomoc...chodzby naprowadzenie mnie co mam zrobić :)

1

Co do emaili.. sa dwa sposoby:

  1. szukac znaku konca, w html sa w sumie 4 mozliwosc:
    href="mailto:asdf@asdf"> (cudzyslow)
    href='mailto:asdf@asdf'> (apostrof)
    href=mailto:asdf@asdf style="costam"> (spacja)
    href=mailto:asdf@asdf> (znak wiekszosci)
    (chyba ze cos mi wypadlo z glowy)...
  2. e-mail sklada sie z okreslonych znakow (A-Z a-z 0-9 @ . _), wiec po prostu przepisuj mejla dopoki znak bedzie mogl wystepowac w mejlu...
int moze_byc( char c )
{
  if( c >='a' || c <= 'z' ) return 1;
  if( c >='A' || c <= 'Z' ) return 1;
  if( c >='0' || c <= '9' ) return 1;
  if( c =='@' || c 0= '.' || c 0= '_' ) return 1;
  return 0;  
}

int odzyskaj_mejla( const char *html, char *mejl )
{
  html = strstr( html, "mailto:" );
  if( !html) return 1;
  while( *html == ' ' ) html++;
  while( moze_byc( *html ) ) *mejl++ = *html++;
  *mejl = '\\0';
  return 0;
}

ofc ta funkcje sprawdzajace na tablicy zaimplementuj a nie na ifach ;>>>
(tj zrob tablice "ascii" wypelniona 0 jesli znak nie moze byc i 1 jesli moze byc, i po prostu sprawdzaj w tablicy wartosc, tylko 1 if dzieki temu jest ;>)

dobra.. a teraz odpowiedz na drugie pytanie:

int odzyskaj( const char *tekst, const char *poczatek, const char *koniec, char *out )
{
  unsigned int sz;
  poczatek = strstr( tekst, poczatek );
  koniec = strstr( test, koniec );
  if( !poczatek || !koniec || poczatek >= koniec ) return 1;l
  sz = (unsigned int)koniec - (unsigned int)poczatek;
  memcpy( out, poczatek, sz );
  out[sz] = '\\0';
  return 0;
}

kod jest na tyle prosty ze chyba wszystko zrozumiale ;> jak by co to pytaj

0

w HTML wygląda to tak : href="mailto:[email protected]"
Ja bym to zrobił tak:

  • Wczytał plik .html do Memo
  • Pokolei pobierał każdą linijkę z Memo (Memo1->Lines->Operator[nr_lini]...)
  • W pobranej lini szukał ciągu "mailto:" - najłatwiej to robić tak:
    if (AnsiPos("mailto:", linia) != 0) { ... tutaj co ma zrobić gdy znajdzie .... }
  • Po znalezieniu szukanego "mialto:" odciął bym z lini to co zbęde (np. linia.Delete(1, AnsiPos("mailto:", linia); ) więc zostało by mi: [email protected]" ......
  • Teraz bym poszukał pozycję cudzysłowy w tym co mi zostało ( s = AnsiPos(char(34), linia); ) i odciął go i to co za nim... Delete (s , linia.Length()) ;
  • Tym oto sposobem wyciągnąłbym sam emial

Pozdrawiam

0

Wielkie dzięki :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1