WyciÄ…ganie danych z AnsiStringa

dział ogólny

WyciÄ…ganie danych z AnsiStringa

Nowy postprzez Michalos » wtorek, 23 grudnia 2008, 03:37

Witam!

Próbuję wyciągnąć dane ze strony filmweb.pl. Część kodu HTML to:
Kod: Zaznacz cały
  1. gatunek:                                                                                                    <strong>            <a href="http://www.filmweb.pl/szukaj/film?sort=COUNT&sortAscending=false&genreIds=6&amp;genreIds=24&amp;genreIds=28"> Dramat, Thriller, Akcja</a>      </strong>       </p>
  2.  
  3.     <p class="film-premieres">

Zaznaczam, że te spacje, nie są przypadkowe, po prostu wczytując funkcją Get() z TIdHTTP dostaję taki rozstrzelony kod :(
Kombinowałem z
Kod: Zaznacz cały
  1. SOURCE.Pos("gatunek:")
i później SubString (po dodaniu do pozycji odpowiedniej liczby), ale to się nie sprawdza, ponieważ link nie zawsze jest takiej samej długości.
Wpadłem na pomysł, żeby "od tyłu" się do tego dobrać ;), dałem AnsiPos("<p class=\"film-premieres\">) i w SubStringu odjąłem liczbę znaków do początku szukanych słów:
Kod: Zaznacz cały
  1. Dramat, Thriller, Akcja

No i niby działa przy tym linku jak są 3 gatunki ale np. jak jest jeden to też działa, ale nie tak jak ma działać (pokazuje też trochę literek wcześniej):P

Tak wygląda mój kod tego co opisałem:
Kod: Zaznacz cały
  1. int i, p;
  2. String ADRES = Edit1->Text;
  3. String SOURCE = IdHTTP1->Get(ADRES);
  4. String tmp;
  5.  
  6. p = SOURCE.Pos("<p class=\"film-premieres\">");
  7. tmp = SOURCE.SubString(p-48,24);
  8. Edit2->Text = tmp;
  9.  
  10. Memo1->Text = SOURCE;


Może mi ktoś doradzić jak to dalej rozwiązać ? Tak sobie myśłę, że przydałaby się funkcja która po napotkaniu ">" (w tym Stringu tmp) ucina znaki wstecz, co ja przez to rozumiem, mając np.:
Kod: Zaznacz cały
  1. Ids=13"> Dramat, Komedia
  2.  

żeby wycieło to przed znakiem ">" włącznie z nim ;)

Nie wiem może jest jakieś lepsze wyjście z tej sytuacji, także proszę o rady/sugestie - "jak to ugryźć?"

//EDIT
W celu usunięcia tych niepotrzebnych znaków, użyłem znów .Pos(), a następnie .Delete()
Kod: Zaznacz cały
  1. p = tmp.Pos(">");
  2. tmp = tmp.Delete(1,p);


Działa! Ale czy to wszystko dobrze napisałem to nie jestem pewien, tymczasem idę spać! ;)
Czekam na Wasze propozycje: "jakbyście Wy to zrobili".

Pozdrawiam
Avatar użytkownika
Michalos
Bladawiec
Bladawiec
 
Posty: 35
Dołączył(a): niedziela, 19 października 2008, 11:45
PodziÄ™kowaÅ‚ : 1
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
    NieznanyNieznana

Re: WyciÄ…ganie danych z AnsiStringa

Nowy postprzez Ho88it » wtorek, 23 grudnia 2008, 12:16

Twój kod jest trochę mało uniwersalny.
Poczytaj to:
http://cyfbar.republika.pl/chain.html#chain7

Możesz wyszukać wystąpienie </a> i obliczyć w tył ilość znaków do pierwszego napotkanego ">" pobrać jego pozycję i wyświetlić obliczoną ilość znaków po nim... czyli gatunki filmowe.
Internet Explorer to program, który służy do przeglądania internetu z twojego komputera i na odwrót.
Avatar użytkownika
Ho88it
Homos antropiczny
Homos antropiczny
 
Posty: 63
Dołączył(a): niedziela, 10 sierpnia 2008, 20:53
PodziÄ™kowaÅ‚ : 2
OtrzymaÅ‚ podziÄ™kowaÅ„: 0
System operacyjny: brak systemu
Kompilator: Visual Studio 2008
Visual Studio 2010
Gadu Gadu: 0
    NieznanyNieznana


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przeglÄ…da forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 6 gości