C++ Builder 2009 | boost::regex

dział ogólny

C++ Builder 2009 | boost::regex

Nowy postprzez Corvis » środa, 22 lipca 2009, 13:26

Witam,

Mam ciekawy problem napisałem sobie kod który mi sprawdza poprawność dopasowania wyrażenia regularnego :

Kod: Zaznacz cały
   String Data="4100FE3FB811";
   String RegularExpr="(STOPPED)";
   std::string result=Data.t_str();
   boost::regex re(RegularExpr.t_str());
   boost::smatch m;
   boost::regex_search(result,m,re);
   bool r = m[1].matched;


Kod działa i wszystko jest super do czasu aż przerobiłem go na funkcję :

Kod: Zaznacz cały
bool BoostObd::CheckRegularExpr(String Data,String RegularExpr) {
   std::string result=Data.t_str();
   boost::regex re(RegularExpr.t_str());
   boost::smatch m;
   boost::regex_search(result,m,re);
   return m[1].matched;
}


Wywołując tą funkcję w taki sposób :

Kod: Zaznacz cały
TForm3::Button1Click(TObject *Sender) {
   bool t2 = obd.CheckRegularExpr("4100FE3FB811","(STOPPED)");
}


Kompilator wywala błąd :

First chance exception at $7C812AFB. Exception class boost::regex_error with message 'Exception Object Address: 0xAC5616'. Process Project2.exe (2868)


Oraz komunikat :

external exception eefface


Ale co jest śmieszne jeżeli zrobię to tak :

Kod: Zaznacz cały
TForm3::Button1Click(TObject *Sender) {
String Data="4100FE3FB811";
   String RegularExpr="(STOPPED)";
   std::string result=Data.t_str();
   boost::regex re(RegularExpr.t_str());
   boost::smatch m;
   boost::regex_search(result,m,re);
   bool r = m[1].matched;

   bool t2 = obd.CheckRegularExpr("4100FE3FB811","(STOPPED)");
}


Wszystko działa OK :[ może ktoś wie o co tutaj chodzi ???

Ps. Np jeżeli nie da się dopasować wyrażenia - nie pasuje to wywala ten błąd co wyżej napisałem :
Kod: Zaznacz cały
bool t2 = obd.CheckRegularExpr("4100FE3FB811","(STOPPED)");


Ale jak da się dopasować to nie ma błędu :( :
Kod: Zaznacz cały
bool t2 = obd.CheckRegularExpr("4100FESTOPPED3FB811","(STOPPED)");


Pozdrawiam i dzięki za pomoc
Ostatnio edytowano środa, 22 lipca 2009, 15:43 przez Corvis, łącznie edytowano 1 raz
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    NieznanyNieznana

Re: C++ Builder 2009 | boost::regex

Nowy postprzez Witold » środa, 22 lipca 2009, 15:32

Corvis napisał(a):Kompilator wywala błąd :

First chance exception at $7C812AFB. Exception class boost::regex_error with message 'Exception Object Address: 0xAC5616'. Process Project2.exe (2868)


Oraz komunikat :

external exception eefface



Zdaje się że leci wyjątek, łapiesz go ? jaka jest jego treść?

Podałeś deklaracje bool CheckRegularExpr(String Data,String RegularExpr) a w kodzie przed jest obd.CheckRegularExpr. CheckRegularExpr to metoda ?
U mnie (BCB6) ten kod (musiałem zmienić t_str() na c_str()) nie rzuca wyjątku.
Avatar użytkownika
Witold
Konstrukcjonista
Konstrukcjonista
 
Posty: 223
Dołączył(a): piątek, 29 sierpnia 2008, 10:53
Podziękował : 1
Otrzymał podziękowań: 14
Kompilator: bcb6, Turbo C++ Explorer
    NieznanyNieznana

Re: C++ Builder 2009 | boost::regex

Nowy postprzez Corvis » środa, 22 lipca 2009, 15:42

Tak metoda,
wywala tylko to co napisałem, Mogę to łapać i stwierdzić, że jak coś złapałem to jest FALSE ale mnie bardziej interesuje czemu to się sypie :\
a zmiana t_str() na c_str() powoduje u mnie :

[BCC32 Error] Boost_Obd.h(65): E2285 Could not find a match for 'boost::regex::basic_regex(wchar_t *)'

denerwować mnie zaczyna Builder 2009 :)
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    NieznanyNieznana

Re: C++ Builder 2009 | boost::regex

Nowy postprzez Corvis » środa, 22 lipca 2009, 16:01

Rozwiązałem ten problem ( chyba ;) )

W Cpp builder 2009 Typ String to UNICODESTRING
w wersjach starszych Typ String To AnsiString

Przeprawiając funkcję w taki sposób :

Kod: Zaznacz cały
bool BoostObd::CheckRegularExpr(AnsiString Data,AnsiString RegularExpr) {
   std::string dd=Data.c_str();
   boost::regex re(RegularExpr.c_str());
   boost::smatch m;
   if(boost::regex_search(dd,m,re)==true) {
      return m[1].matched;
   } else return false;
}


Nie mam już żadnych błędów.

Trzeba uważać na ten Unicode %-)
"Sukcesy trwają, dopóki ich ktoś nie spieprzy. Porażki są wieczne"

Dr Gregory House
Avatar użytkownika
Corvis
Programista I
Programista I
 
Posty: 880
Dołączył(a): sobota, 26 lipca 2008, 00:31
Podziękował : 80
Otrzymał podziękowań: 30
System operacyjny: WINDOWS 7 64-bity
Kompilator: Praca - C++ Builder XE2 ENTERPRISE - Update 4, Dom - C++ Builder XE4 - Uddate 1
Gadu Gadu: 0
    NieznanyNieznana

Re: C++ Builder 2009 | boost::regex

Nowy postprzez Witold » środa, 22 lipca 2009, 17:06

Corvis napisał(a):wywala tylko to co napisałem, Mogę to łapać i stwierdzić, że jak coś złapałem


Myślałem o łapaniu boost::regex_error, zapomniałem o tym wspomnieć, ...ale to było w komunikacie który podałeś. Zresztą nieważne poradziłeś sobie...
Avatar użytkownika
Witold
Konstrukcjonista
Konstrukcjonista
 
Posty: 223
Dołączył(a): piątek, 29 sierpnia 2008, 10:53
Podziękował : 1
Otrzymał podziękowań: 14
Kompilator: bcb6, Turbo C++ Explorer
    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 11 gości

cron