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ć :)
0
1
Co do emaili.. sa dwa sposoby:
- 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)... - 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