[Delphi} wyrażenia regularne

0

Ściągnąłem sobie ze strony http://regular-expressions.info/delphi.html komponent o nazwie PerlRegEx.

Kombinuje i kombinuje i nie wiem jak wykorzystać ten komponent :/

Przeczytałem to co jest na tej stronie ale ciągle nic :/

Chciałbym przy użyciu tego komponentu wyciągnąć z Memo1 tekst który jest zawart pomiędzy abc i xyz.

Przykładowy text w memo: abctu jest to co mnie interesujexyz

Mógłby mi ktoś z Was wytłumaczyć jak się robi takie rzeczy ?

0

A nie możesz zrobić tego za pomocą instrukcji programowania w języku Delphi? Czy musisz koniecznie używać wyrażeń regularnych i komponentów? Przecież wystarczą instrukcję pos i copy żeby wyciagnąc ten fragment

0

hmmm

Mój problem polega na tym, że z ciągu znaków chcę wyciągnąć to co mnie interesuje.
A interesuje mnie to co znajduje się pomiędzy pewnymi fragmentami tekstu i nie wiem ile znakw ma ten tekst.
Chyba niejasno pisze :/

Chodzi mi o to, że np. z takie tekstu:
ab cd efg h i jklm n o pr rs tuw yz ab cdefg h i j k lmno prstuw

chciałbym wyciągnąć to co znajduje się pomiędzy 'cd' a 'lm'

czyli z tego tekstu wyciągneło by mi dwa łańcuchy, pierwszy wyglądałby tak ' efg h i jk', a drugi tak 'efg h i j k '

Kolega który pisze w php powiedział mi, że do czgeoś takie najlepsze są wyrażenia regularne. Dlate ściągnąłem sobie ten komponent, którego teraz nie potrafię użyć :/

Jeśli jest jakiś inny, lepszy sposób to chętnie z niego skorzystam :-)

0

wszystko można załatwić za pomocą funkcji pos, copy, length i delete

procedure TForm1.Button1Click(Sender: TObject);
var
 pocz, kon, text :string;
 poczatek, koniec: integer;  
begin
 pocz:=Edit1.Text; // fragment rozpoczynający wycięty łańcuch
 kon:=Edit2.Text;  // fragment kończący wycięty łańcuch
 text:=Memo1.Text; // tekst, z którego chcesz wycinac łańcuch
 while (pos(pocz,text)<>0) and (pos(kon,text)<>0) do
  begin
   poczatek:=pos(pocz,text)+length(pocz);  // ustala początek łańcucha
   koniec:=pos(kon,text);                  // ustala koniec łańcucha
   Memo2.Lines.Add(copy(text,poczatek,koniec-poczatek)); // wycina łańcuch
   delete(text,1,koniec+length(kon));              // usuwa sprawdzony fragment
  end;
end;

działa z małą wadą, jeśli masz taki tekst:

text text text abc text abc text xyz

to wycięty fragment będzie wyglądał tak:

" text abc text "

Jeśli Ci to przeszkadza, to na pewno można to jakoś rozwiązać, wystarczy troche posiedzieć.

0

kurde - przecież komponent o którym piszesz też musi uzywać funkcji copy, pos, length, delete i innych. Grzecho_83 podał Ci przykladowy kodzik posiedź trochę - a na pewno dasz sobie radę z tym problemem - poczytaj trochę o tych funkcjach i na pewno wszystko stanie się jasne

0
zawad napisał(a)

Kolega który pisze w php powiedział mi, że do czgeoś takie najlepsze są wyrażenia regularne. Dlate ściągnąłem sobie ten komponent, którego teraz nie potrafię użyć :/

No właśnie - Kolega Ci powiedział. Problem w tym, że tak jak piszesz kolega siedzi w PHP, a Ty w Delphi. No i różnica jest taka, że PHP jest językiem skryptowym i jeśli w niego są wbudowane funkcje do wyrażeń regularnych, to jest to o niebo lepsze niż robienie tego "ręcznie". Bo wykonywanie każdej instrukcji w PHP trwa niemal niezależnie od tego, jak jest potem skomplikowana. Natomiast w Delphi możesz użyć wbudowanych w język albo podstawowe biblioteki funkcji bezpośrednio zamiast korzystać z komponentów, które działają na ich bazie. Oszczędzisz czasu wykonywania i pamięci.

0

Stad http://regexpstudio.com/ sciagniesz wspaniala klase do obslugi wyrazen regularnych :) wszystko jest w przykladach, a reszty nauczysz sie z stronki ktora podales w pierwszym poscie ;)

0

Wielkie dzięki za pomoc.

Teraz wszystko działa tak jak chciałem :-)

1 użytkowników online, w tym zalogowanych: 0, gości: 1