Regexy - wyrażenia regularne

dział ogólny

Regexy - wyrażenia regularne

Nowy postprzez Michalos » niedziela, 21 grudnia 2008, 18:49

Witam!

Tworzę programik, którego zadaniem jest po podaniu linku do strony filmweb.pl zebrania potrzebnych informacji i wpisania ich do TEdita. Wczytanie źródła strony uzyskałem dzięki pakietowi Indy. Teraz rodzi się problem, jak wydobyć potrzebne informacje, pomyślałem o regexach, znalazłem bibliotekę Boost.Regex, ale niestety nie mogę jej prawidłowo dołączyć, wyskakuje komunikat:
[ILINK32 Error] Fatal: Unable to open file 'LIBBOOST_REGEX-BCB-MT-SD-1_37.LIB'


Mam:
Kod: Zaznacz cały
#include <boost/regex.hpp>

Pliki Boosta wgrywałem do katalogu BC/include i BC/lib

Może ktoś zna inne biblioteki do tego typu zastosowań, podam przykład wydobycia gatunku filmowego - nie mam jak sprawdzić czy działa:
Kod: Zaznacz cały
<strong> gatunek: <strong> <a href=".">([a-zA-Z0-9]+)</a>


Może ktoś często używa wyrażeń regularnych i jest chętny pomóc? A może ktoś poradzi jakąś inna technikę wydobywania potrzebnych informacji ze źródła strony (operacje na stringach?) ?

Pozdrawiam
Ostatnio edytowano poniedziałek, 22 grudnia 2008, 02:23 przez Michalos, łącznie edytowano 1 raz
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: Regexy - wyrażania regularne

Nowy postprzez Cyfrowy Baron » niedziela, 21 grudnia 2008, 19:17

A przyjrzałeś się poradzie:
► patrz serwis: Cyfrowy Baron dział: porady -> sieć - internet -> Wyciąganie adresów URL ze stron internetowych.

Zastosowałem tam parsowanie strony wczytanej do zmiennej AnsiString, po modyfikacji można wydobyć cokolwiek.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Regexy - wyrażania regularne

Nowy postprzez wargo » niedziela, 21 grudnia 2008, 20:13

Musisz umieścic plik w katalogu boost albo usunąć to ze ścieżki #include.
Avatar użytkownika
wargo
Mądrosław
Mądrosław
 
Posty: 389
Dołączył(a): niedziela, 13 lipca 2008, 16:44
Podziękował : 12
Otrzymał podziękowań: 3
System operacyjny: Windows 7
Kompilator: C++ Builder 6 Personal
Gadu Gadu: 6259515
    NieznanyNieznana

Re: Regexy - wyrażania regularne

Nowy postprzez Michalos » niedziela, 21 grudnia 2008, 22:01

wargo napisał(a):Musisz umieścic plik w katalogu boost albo usunąć to ze ścieżki #include.


W katalogu boost mam ten plik ;) Jak nie miałem to był inny błąd :)

Co do propozycji Barona to troszkę dla mnie to za skomplikowane, zależy mi żeby dobrze opanować wyrażenia regularne z uwagi na to, iż to bardzo często może ułatwić pracę ;)
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: Regexy - wyrażania regularne

Nowy postprzez polymorphism » poniedziałek, 22 grudnia 2008, 00:26

Pytanie zasadnicze: czy skompilowałeś bibliotekę boost? 8-)
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    NieznanyNieznana

Re: Regexy - wyrażania regularne

Nowy postprzez Michalos » poniedziałek, 22 grudnia 2008, 01:38

polymorphism napisał(a):Pytanie zasadnicze: czy skompilowałeś bibliotekę boost? 8-)


Co przez to rozumiesz?
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: Regexy - wyrażenia regularne

Nowy postprzez polymorphism » poniedziałek, 22 grudnia 2008, 12:19

Ano to rozumiem, że żeby skorzystać niektórych modułów z boost'a, trzeba je najpierw skompilować. Niewątpliwie regex do nich należy, czemu dał wyraz linker krzycząc o braku odpowiedniego LIB'a.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    NieznanyNieznana

Re: Regexy - wyrażenia regularne

Nowy postprzez Cyfrowy Baron » poniedziałek, 22 grudnia 2008, 13:29

Niektóre biblioteki oprócz samego pliku - w Twoim przypadku regex.hpp wymagają dołączenia do projektu pliku LIB, jeżeli takowy wchodzi w skład biblioteki, stąd komunikat o błędzie: [ILINK32 Error] Fatal: Unable to open file 'LIBBOOST_REGEX-BCB-MT-SD-1_37.LIB', czyli powinieneś włączyć do projektu poprzez menu Project -> Add to project bibliotekę LIBBOOST_REGEX-BCB-MT-SD-1_37.LIB. Jeżeli jej nie posiadasz, to musisz poszukać, ewentualnie sprawdź czy nie została dołączona biblioteka LIB o innej nazwie.



Kolejna sprawa, jeżeli umieszczasz bibliotekę w katalogu z programem to nie ujmuj jej w symbole <>, gdyż linkier będzie jej szukał w katalogu środowiska C++ Builder, gdyż te symbole to mu właśnie sugerują. Zamiast tego umieść bibliotekę w cudzysłowie:

#include "boost/regex.hpp"

Piszesz że umieściłeś pliki boosta w katalogach INCLUDE i LIB, więc ten problem nie powinien Ciebie dotyczyć. Zakładam jednak, że umieściłeś w katalogu LIB jakiś plik *.lib który trzeba właśnie dołączyć do projektu poprzez menu Project -> Add to project.



Co do konieczności skompilowania biblioteki to polymorphism ma rację, jednak środowisko BCB począwszy od wersji 4 ma to do siebie, że automatycznie kompiluje wszystkie wymagające tego biblioteki dołączone do projektu podczas kompilacji tegoż projektu, Może o tym świadczyć chociażby fakt, że dołączając do projektu plik zasobów *.RES można zamiast skompilowanego pliku RES dołączyć wersję tekstową tegoż pliku czyli plik RC, kompilator skompiluje i automatycznie utworzy plik RES i dołączy do projektu. Podobnie jest z bibliotekami LIB.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Regexy - wyrażenia regularne

Nowy postprzez polymorphism » poniedziałek, 22 grudnia 2008, 14:29

Jeżeli jej nie posiadasz, to musisz poszukać, ewentualnie sprawdź czy nie została dołączona biblioteka LIB o innej nazwie.

Znaleźć to jej nie znajdzie, bo boost jest dostępny tylko w wersji do skompilowania (no, może poza VC, tu można sobie ściągnąć binarki specjalnie do tego stworzonym instalatorem). Dodawanie plików CPP do projektu też nie wchodzi w rachubę - jest to biblioteka duża i przede wszystkim multiplatformowa, co powoduje, że jest dużo zależności, które bez znajomości struktury całego boost'a mogą skutecznie uniemożliwić kompilację "ręczną". Szczególnie jeśli ktoś ma pierwszy raz do czynienia z kompilacją bibliotek.

Kolejna sprawa, jeżeli umieszczasz bibliotekę w katalogu z programem to nie ujmuj jej w symbole <>, gdyż linkier będzie jej szukał w katalogu środowiska C++ Builder,

Jeśli poprawnie zainstaluje tą bibliotekę, to będzie mógł załączać pliki przez #include <>. To kwestia poprawnego skonfigurowania środowiska, zmiennych środowiskowych itd.

Zakładam jednak, że umieściłeś w katalogu LIB jakiś plik *.lib który trzeba właśnie dołączyć do projektu poprzez menu Project -> Add to project

O Ile się nie mylę, w przypadku BCB, podobnie jak w VC, LIB'y mogą być załączanie z poziomu kodu źródłowego - odpowiednia dyrektywa #pragma. Więc wystarczy załączyć plik HPP i reszta sama się zrobi ;)

Podobnie jest z bibliotekami LIB.

Niestety nie jest to prawdą.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    NieznanyNieznana

Re: Regexy - wyrażenia regularne

Nowy postprzez Cyfrowy Baron » poniedziałek, 22 grudnia 2008, 15:26

Fakt. To coś więcej niż pojedyncza biblioteka.



Opis instalacji dla BCB 6

-> Uruchom konsolę CMD.
-> Przejdź do katalogu [...]<boost>\libs\regex\build - gdzie [...] to katalog w który znajduje się wypakowane archiwum boost, <boost> to katalog z podkatalogami bibliotek.
-> Wpisz polecenie: make -fbcb6.mak i poczekaj aż konsola zakończy działanie.
-> Teraz trzeba zainstalować biblioteki, w tym celu wpisz polecenie: make -fbcb6.mak install - biblioteki zostaną skopiowane do katalogu: LIB do <BCB_ROOT>/lib; DLL do <BCB_ROOT>/bin, gdzie <BCB_ROOT> to ścieżka systemowa środowiska BCB.
-> Na zakończenie możesz usunąć pliki tymczasowe wpisując polecenie: make -fbcb6.mak clean
-> W menu Tools -> Options odszukaj zakładkę C++ Options a następnie Path and Directorie (używam BCB 2007 i nie pamiętam jak to jest dokładnie w BCB 6) przy polu Include path wciśnij przycisk [...] i w oknie które wyskoczy wprowadź ścieżkę dostępu do katalogu boost zawierającego biblioteki, np: c:\My_libraries\boost.
-> Gotowe! Możesz korzystać z bibliotek.



Powyższy opis dotyczy środowiska Borland C++ Builder 6, ale sprawdza się on równie dobrze dla środowiska BCB powyżej wersji 6.





"Zawsze nam się wydaje, żeśmy coś zrobili, ale wstrzymujemy się, kiedy pomoc jest najbardziej potrzebna."
Erich Maria Remarque
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Regexy - wyrażenia regularne

Nowy postprzez Michalos » poniedziałek, 22 grudnia 2008, 18:55

Dzięki wielkie, teraz już nie wywala błędów z brakiem bibliotek, mam pytanie skąd: Jak na to wpadłeś ? :P Znalazłeś gdzieś w sieci, czy tak sie robi podobnie do innych bibliotek ? Chciałbym wiedzieć, żeby następnym razem nie musiał zawracać Wam głowy ;)
Ostatnio edytowano poniedziałek, 22 grudnia 2008, 19:52 przez Cyfrowy Baron, łącznie edytowano 1 raz
Powód: Administrator usunąl cytat, gdyż cytowanie całego postu jest zbędne i niepotrzebnie zaśmieca forum.
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: Regexy - wyrażenia regularne

Nowy postprzez polymorphism » poniedziałek, 22 grudnia 2008, 19:21

Tego typu informacje prawie zawsze znajdziesz na stronie danego projektu.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    NieznanyNieznana

Re: Regexy - wyrażenia regularne

Nowy postprzez Cyfrowy Baron » poniedziałek, 22 grudnia 2008, 19:50

Wystarczy czytać pliki Readme i zaglądać na stronę producenta. Jak widać tylko mi się chciało.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    NieznanyNieznana

Re: Regexy - wyrażenia regularne

Nowy postprzez Michalos » środa, 24 grudnia 2008, 03:57

Których/ej funkcji użyć w celu wyciągnięcia ciągu znaków w podanym poniżej przykładzie w nawiasach?
Kod: Zaznacz cały
<strong> gatunek: <strong> <a href=".">([a-zA-Z0-9]+)</a>
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: Regexy - wyrażenia regularne

Nowy postprzez polymorphism » środa, 24 grudnia 2008, 10:03

Chodzi ci o regex'a?

Tak na dobrą sprawę to nie wiem, czy wyrażenia regularne są do tego zadania potrzebne. Z tego co widzę, to chcesz zrobić zwykłe parsowanie tagów HTML'a, a tu wystarczy jakiś parser XML.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    NieznanyNieznana

Następna strona

  • 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 9 gości