Wyszukiwanie frazy i wyciąganie z niej danych.

0

Witam.
Mam problem bo nie za bardzo wiem jak w tekście (SynMemo) znaleźć wyrażenie:
function nazwa_funkcji(
i tak cały text "przelecieć" a nazwa_funkcji jest zmienna i chciałbym ją odczytać.
Mam także pytanie jak zoptymalizować taką funkcję gdyż ma ona się odbywać w czasie rzeczywistym bo to ma być do edytora PHP, później będzie dodawać tą nazwę do takiej tabeli ale z resztą sobie już poradzę.
Wiem że musi być utworzona pętla o warunku rozmiaru textu tylko nie wiem jak wyszukać tej frazy, podobnie będę musiał utworzyć dla include(''); i tak dalej.

0

Ja bym użył wyrażeń regularnych. Dla Pascala poniższy kod działa w sumie ok dla funkcji z parametrami,
a takie Ciebie chyba interesują. Użyłem na szybko wprawdzie Memo, ale pod SynMemo czy SynEdit, też
powinno działać bez problemów. Ewentualnie sobie popraw Expression, tak aby Tobie odpowiadało, a ów
moduł dp wyrażeń regularnych z dokumentacją wrzuciłem na: http://www.mediafire.com/?czhw3mmzjyn

//...
uses
  regexpr;

function GetFuncsNames(AInputString : string) : string;
var
  RMain, RFunc : TRegExpr;
begin
  Result := '';
  RMain := TRegExpr.Create;
  RFunc := TRegExpr.Create;
  try
    RMain.Expression := 'function (.+?);';
    RFunc.Expression := '(.+?)\((.+)\)';
    if RMain.Exec(AInputString) = True then
    begin
      repeat
        if RFunc.Exec(RMain.Match[1]) = True then
        begin
          Result := Result + RFunc.Match[1] + #13#10
        end;
      until RMain.ExecNext = False;
    end;
    Delete(Result, Length(Result) - 1, 2);
  finally
    RMain.Free;
    RFunc.Free;
  end;
end;

procedure TForm1.Button1Click(Sender : TObject);
begin
  Memo1.Lines.LoadFromFile('D:\test.pas');
  Memo1.Text := GetFuncsNames(Memo1.Text);
end;
0

@olesio

Ja bym użył wyrażeń regularnych

A nie synapse?

0

Nie, nie Synapse. Bo do parsowania tekstów się ono raczej nie nadaje.
Poza tym drogi haterze, jeśli chcesz mnie ktyrykować - to dlaczego się
tutaj nie zarejestrujesz? To raz. Dwa - to dlaczego sam nie odpowiesz
na pytanie ProQix Polaczeq - tylko zaśmiecasz forum bzdetami. Wiem,
że krytykowac jest najłatwiej, niż konkretnie pomóc. Pokazałeś "klasę".

0

Ok dzięki za odp. sprawdzę to suebie w chacie bo neta w domu nie mam i pisze w szkole...

0

A co do optymalizacji kodu w czasie rzeczywistym tzn jak napisze sobe po załadowaniu pliku jak go edytuje i dopisze tam kolejna linijka function ... to zeby sie to od razu dodalo, a jak usune to zeby sie usunelo z tej listy?

0

Ten kod powinien się wykonywać dość szybko, jednak jeżeli chcesz
uauwać z listy to posłuż się może TStringList z nazwami funkcji i do
niej dodawaj jeżeli IndexOf('nazwa_funkcji') = -1, a usuwaj także z
użyciem IndexOf. A i IndexOf, ignoruje wielkość liter w parametrze.

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