Wyciąganie zmiennych

0

Witam

Mam gigantyczny problem z wprowadzeniem pewnego udoskonalenia w pisanej przeze mnie aplikacji.

Aplikacja ma na celu wyszukanie jednej (lub więcej) zmiennej javascript zawartej w kodzie html, który jest dostarczany wcześniej do elementu Memo z IdHTTP.

Na przykładzie:

jakiś kod html
<script type="text/javascript"> 
		var zmienna=123456789;
                var nieistotnazmienna=12;
                var 2nieistotnazmienna=50;
                </script>
jakiśkodhtml

Potrzebuję, aby po wykonaniu procedury, którą planuję przygotować wyciągnąć zmienną 123456789.
Na stronie moze wystąpić kilka identycznie wyglądających zmiennych i potrzebuję wszystkie przygarnąć, np. do elementu Memo.

Próbowałem to zrobić Pos'em, ale nie dałem rady jakoś, PosEx zaś nie chce mi działać na Delphi 2010.

Proszę o pomoc

0

Musiałbyś zrobić wyszukiwanie wersu zmiennej znać odległość od początku wersu, zrobić kopiuj od = do końca wersu. Jakoś na pewno da się tak zrobić. :]

0
matigi12 napisał(a)

Musiałbyś zrobić wyszukiwanie wersu zmiennej znać odległość od początku wersu, zrobić kopiuj od = do końca wersu. Jakoś na pewno da się tak zrobić. :]

rzecz w tym, że to jest za każdym razem w innym miejscu

0

Jest też opcja wyłuskania TPerlRegexem(free) do wstepnego przeszukania od Var do średnika

0
maciejmt napisał(a)

Jest też opcja wyłuskania TPerlRegexem(free) do wstepnego przeszukania od Var do średnika

Mógłbyś przedstawić mi przykładowe zastosowanie na w/w przykładzie?

Mam tego do zrobienia kilka sztuk i nie chciałbym się gdzieś bachnąć.

Dzięki z góry!

0

Też tam właśnie pisałem najpierw wyszukaj nazwę zmiennej tak żeby uzyskać jej wers nie pamiętam komendy ale skoro pisałeś że jest to w memo to na pewno było coś typu findtext. To może działać na zasadzie szukania w notatniku.

0
matigi12 napisał(a)

Też tam właśnie pisałem najpierw wyszukaj nazwę zmiennej tak żeby uzyskać jej wers nie pamiętam komendy ale skoro pisałeś że jest to w memo to na pewno było coś typu findtext. To może działać na zasadzie szukania w notatniku.

Z całym szacunkiem ale nie napisałem tu po to, aby się dowiedzieć, że nie znasz komendy. Ja tez jej nie znam, dlatego pytam specjalistów.

0
procedure TForm1.Button1Click(Sender: TObject);
var
  LRegex: TPerlRegEx;
  Buff: string;
  ind: Integer;
begin
    LRegex := TPerlRegEx.Create;
    LRegex.RegEx := UTF8String('var ([\w-\.]+)=([\w-\.]+);');
    LRegex.Subject := UTF8String(memo1.Text);
    if not LRegex.Match then
      MessageDlg('bla bla', mtInformation, [mbOK], 0)
    else
    begin
      repeat
        Buff := string(LRegex.MatchedText);
        Ind := Pos('=', Buff) + 1;
        ShowMessage(Copy(Buff,  Ind, Pos(';', Buff) - Ind))
      until not LRegex.MatchAgain;
    end;
    LRegex.Free;
end;

Niech ktoś poprawi moje wyrażenie, niby działa, ale prościej jakoś z gwiazdką idzie zapisać.

W LRegex.MatchedText jest wyrazenie w typie 'var cos=123;'
I teraz:

Ind := Pos('=', Buff) + 1;
ShowMessage(Copy(Buff,  Ind, Pos(';', Buff) - Ind));

W razie jakbyś chciał to zastosować , to moge podesłać TPerlRegexa, takze uzywam D2010. PosEx jest w StrUtils :-P

0

Ja tylko dodam, że można też skorzystać z modułu RegExpr, ktorego oryginalną paczkę
wrzuciłem na http://www.mediafire.com/?czhw3mmzjyn link nie wygaśnie. A w środku
rara są przykłady oraz dokumentacja, używa się tego podobnie jak wspomianego Perl.

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