Ĺadny brzuch
Jak w C++ buldier wyciągnąć z ciągu znaków pewne dane. A dokładnie chodzi o wyciąganiu do zmiennych z przykładowego ciągu:
<td><a href="http://jakis_adres_1.pl">To jest link 1</a> | ><a href="http://jakis_adres.pl_2">To jest link 2</a></td> adres strony www oraz anchor text linka
oraz z ciagu:
<title>Tytul strony</title> to co jest między znacznikami <title></title>
Chodzi mi o napisanie programu parsera do analizy strony www i wyciągania z niej określonych danych...
W PHP są do tego odpowienie funkcje wyrażeń regulanych, ale nie bardzo wiem jak jak zrealizować w C++ :(
Proszę o pomoc
Pozdrawiam ALL
Użytkownik Darek_c++ edytował ten post 24 listopad 2006, 12:36
A może by tak poszukać w dokumentacji, czy tam nie ma gotowego parsera HTML? Nie znam Buildera, więc nie wiem czy jest, ale pisałem coś podobnego w wxWidgets i tam takowy parser jest. Ale nawet jak nie ma w Builderze, to zapewne ktoś już taki napisał, trzeba by tlko poszukać.
:blink: a jakieś bardziej konstruktywne odpowiedzi [podpowiedzi] ?
Użytkownik Darek_c++ edytował ten post 24 listopad 2006, 20:41
A jakieś bardziej konkretne pytania? Narazie to stoi na tym, że chcesz coś mieć. A zrobiłeś coś konstruktywnego? Sprawdziłeś w dokumentacji, czy nie ma? Pogoglałeś za gotową biblioteką? Jakiej konstruktywnej pomocy oczekujesz?
rozbudowy tegi kodu wyjściowego:
void __fastcall TForm1::Button1Click(TObject *Sender) { }
Migajek opublikował swój praser tylko, że w delphi. Ale nie widze problemu żeby sobie przerobić.
http://forum.ks-eksp...mp;#entry331145
Użytkownik pura89 edytował ten post 24 listopad 2006, 21:47
Ale nie widze problemu żeby sobie przerobić. ja niestety widzę - nie bardzo wiem jak :(
psedokod
int i = 0; std::string str; // kod html while ( i < str.length ) { switch (str[i]) { case '<': i++; while ( (i < str.length) && ( str[i] == " " ) ) i++; // pomin biale spacje i++; int p = i; //zapisz poczatek while ( (i < str.length) && ( str[i] != " " ) && ( str[i] != "=" ) ) i++; // idz na koniec taga // teraz sobie skopiuj nazwe taga - p wyznacza poczatek, i : koniec break; } i++; }
oczywiscie nie jest to dzialajacy kod c++, nie jestem pewien czy w odpowiednich miejscach dalem zwiekszanie "i" (przed i po bialych spacjach) ale jak troche pokombinujesz i podebugujesz - bedzie dzialac :]
postepujac analogicznie mozesz napisac wyciaganie wlasnosci itp.
po prostu trzeba dokladnie przyjrzec sie skladni (x)html i odpowiednio reagowac na stale elementy.
zastanow sie jak postepowac z "<", "=", "/" (to ostatnie dla XHTML :)
poza tym tu masz rowniez moj art na temat, http://4programmers....HTML_DOM_Parser
w delphi ale napisane duzo sprawniej (tylko costam nie dziala, juz nie pamietam co)
Dzięki pokombinuję z Twoim prototypem...
A swoją drogą to nikt z Was nie ma większego doświadczenie w wyrażeniach regularnych i obsłudze biblioteki Boost regrex ?
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
<td><a href="http://jakis_adres_1.pl">To jest link 1</a> | ><a href="http://jakis_adres.pl_2">To jest link 2</a></td> adres strony www oraz anchor text linka
oraz z ciagu:
<title>Tytul strony</title> to co jest między znacznikami <title></title>
Chodzi mi o napisanie programu parsera do analizy strony www i wyciągania z niej określonych danych...
W PHP są do tego odpowienie funkcje wyrażeń regulanych, ale nie bardzo wiem jak jak zrealizować w C++ :(
Proszę o pomoc
Pozdrawiam ALL
Użytkownik Darek_c++ edytował ten post 24 listopad 2006, 12:36
A może by tak poszukać w dokumentacji, czy tam nie ma gotowego parsera HTML? Nie znam Buildera, więc nie wiem czy jest, ale pisałem coś podobnego w wxWidgets i tam takowy parser jest. Ale nawet jak nie ma w Builderze, to zapewne ktoś już taki napisał, trzeba by tlko poszukać.
:blink: a jakieś bardziej konstruktywne odpowiedzi [podpowiedzi] ?
Użytkownik Darek_c++ edytował ten post 24 listopad 2006, 20:41
A jakieś bardziej konkretne pytania? Narazie to stoi na tym, że chcesz coś mieć. A zrobiłeś coś konstruktywnego? Sprawdziłeś w dokumentacji, czy nie ma? Pogoglałeś za gotową biblioteką? Jakiej konstruktywnej pomocy oczekujesz?
rozbudowy tegi kodu wyjściowego:
void __fastcall TForm1::Button1Click(TObject *Sender) { }
Migajek opublikował swój praser tylko, że w delphi. Ale nie widze problemu żeby sobie przerobić.
http://forum.ks-eksp...mp;#entry331145
Użytkownik pura89 edytował ten post 24 listopad 2006, 21:47
Ale nie widze problemu żeby sobie przerobić. ja niestety widzę - nie bardzo wiem jak :(
psedokod
int i = 0; std::string str; // kod html while ( i < str.length ) { switch (str[i]) { case '<': i++; while ( (i < str.length) && ( str[i] == " " ) ) i++; // pomin biale spacje i++; int p = i; //zapisz poczatek while ( (i < str.length) && ( str[i] != " " ) && ( str[i] != "=" ) ) i++; // idz na koniec taga // teraz sobie skopiuj nazwe taga - p wyznacza poczatek, i : koniec break; } i++; }
oczywiscie nie jest to dzialajacy kod c++, nie jestem pewien czy w odpowiednich miejscach dalem zwiekszanie "i" (przed i po bialych spacjach) ale jak troche pokombinujesz i podebugujesz - bedzie dzialac :]
postepujac analogicznie mozesz napisac wyciaganie wlasnosci itp.
po prostu trzeba dokladnie przyjrzec sie skladni (x)html i odpowiednio reagowac na stale elementy.
zastanow sie jak postepowac z "<", "=", "/" (to ostatnie dla XHTML :)
poza tym tu masz rowniez moj art na temat, http://4programmers....HTML_DOM_Parser
w delphi ale napisane duzo sprawniej (tylko costam nie dziala, juz nie pamietam co)
Dzięki pokombinuję z Twoim prototypem...
A swoją drogą to nikt z Was nie ma większego doświadczenie w wyrażeniach regularnych i obsłudze biblioteki Boost regrex ?