[Delphi]Szukanie i wyniki

0

Mały/wielki problem z wyszukiwaniem tekstu...ale troszeczkę inaczej:

ogólnie ma to wyszukać ustalone słowo w tekście, po znalezieniu, wyciąć to słowo i kontynuować dalsze szukanie znak po znaku - tworząc w tym czasiekolejny string - aż do momentu gdy nie natrafi na znak przerywający dalsze szukanie. Następnie wrzuceniu tak utworzonego ciągudo TTreeView jako tekst.
Innymi słowy odszukaniu nazwy funkcji, procedury, typu...itp.
Grzebnąłem coś takiego:

procedure TFrmMain.ScanLine;

var licz1,licz2, licz3  : integer;
    linia,slowo         : string;
    Nazwa               : string;
    SrOpt               : TSynSearchOptions;
//    punkt               : TPoint;
//    lista               : TStrings;


const TypeName  : array[1..5] of string = ('Procedure','Function','Type','Var','Const');
      BreakType : array[1..5] of char = (';' , '(' , ')' , '=', ',');

begin
 ObjExplorer1.Items.Clear;
 srOpt:=[];
 for licz1:=1 to Length(SynEdtExplorer1.Lines.Strings[licz1]) do    //od jednego do długości linii
  begin
   SynEdtExplorer1.TopLine:= licz1 - 1;
   linia:=SynEdtExplorer1.Lines.Strings[licz1];                    //wczytaj linie
   licz2:=1;                                                       //ustaw drugi licznik
    repeat
    begin
     slowo:=TypeName[licz2];
      if SynEdtExplorer1.SearchReplace(slowo,'',srOpt)<>0              //do licznika podstaw wynik szukania
     // if licz3<>0                                                  //jeśli cośznalazł
         then begin
               slowo:=linia;
               licz3:=1;                                           //skopiuj linie i
               Delete(slowo,1,Length(TypeName[licz2]));            //przytnij o długość wyszukanego wyrazu
               if Length(slowo)>0 then                             //jeśli coś jeszcze zostało
                  //case char
                   while licz3 <= Length(slowo) do              //to pomijamy spacje i zobaczmy co
                    begin
                     case slowo[licz3] of                             //jesli jest "przerywnik"
                       ';' :break;                                        // to przerwij :))
                       ',' :break;
                       '(' :break;
                       ')' :break;
                       '=' :break;

                     else if slowo[licz3]<>' '                        //w przeciwnym razie
                             then Nazwa:=Nazwa+slowo[licz3] //jedziemy znak po znaku i 
                             else break;                                 //tworzymy string, ktory... 

                     ObjExplorer1.Items.Add(nil,slowo);    //...trzeba dodac do TTreeView

                     licz3:=licz3+1;
                     end;
                    end;
               SynEdtExplorer1.TopLine:= licz1 - 1;
               licz2:=licz2+1;
              end;
     end;
     until licz2<=5;
  end;
end;

Pytanie: dlaczego to nie chce zadziałać?? Przepisywałem już tą procedurę kilkanaście razy w różny sposób...i nic. GDZIE JA ROBIE BŁĄD???
niby wszystko jest logiczne...ale nie działa....

Hellp

// Uzywaj tagu delphi, a nie code..

0

Uważam że nie potrzebnie te komentarze typu "w przeciwnym razie", kody byłby dużo czytelniejszy bez nich, zaraz wkleje do delphiego i postaram sie obczaić co nie gra :>

//D E L P H I [diabel] nie delphiego..ze łsi (wsi) jestes? - lofix

0

Uważam że nie potrzebnie te komentarze typu "w przeciwnym razie", kody byłby dużo czytelniejszy bez nich, zaraz wkleje do delphiego i postaram sie obczaić co nie gra :>

...i jak obczaiłeś już coś ??

Ja nadal za każdym podejściem odchodzę "na tarczy". Już 3 dzień po 18-20 godzin na dobe i ...nic. ;-( [stuk] niech mi ktoś pomoże PLEASE.

Zrobie to i moge oddawać prace do promotora.

ps.a może ma ktoś inny pomysł jak to zrobić ?

HELP

0

Dobra wiec zaczynamy :] Dzisiaj mam noc pomagania ludziom.

  • Najpierw bedziemy musieli doczytac linie z pliku. Wierze ze to umiesz zrobic ;]

  • Teraz musimy podzielic ta linie na wystepujace w niej wyrazy. Najlepiej uzyc metody, z ktorej korzystam od zawsze. A polega ona na:

    • Tworzysz tablice z 20 strtingow ( zakladamy, ze tyle moze byc wyrazow w lini ). Po czym czytasz znak po znaku linie i jesli znak jest inny niz spacja (czyli litera) to dodajesz go do stringa w tablicy. Jesli wystapila spacja (lub znak ";" bo z tego co widze to jakies IDE piszesz) to program zwieksza licznik, w ktorym polu tablicy ma wpisywac znaki. *
  • Masz tu zrodelko do tej metody powyzej, ale uwzglednia on tylko spacje :] Wiec musisz go troche przerobic, ale widze ze powinienes sobie poradzic:

procedure podziel;
var
km_linia : string; // zczytana z pliku linia
km_slowa : array[1..20] of string; // tablica ze slowami
km_i2 : byte; // licznik
km_slowo : byte; // licznik
km_dlugosc : byte; // ilosc znakow w lini

begin

km_slowo := 1;
km_dlugosc := length(km_linia);

for km_i2 := 1 to km_dlugosc do
    if km_linia[km_i2] <> ' ' 
       then km_slowa[km_slowo] := km_slowa[km_slowo] + km_linia[km_i2]
       else if km_slowo < 20 then inc(km_slowo);
            
end;
  • Po tym wszystkim masz w pamieci slowa. Wiesz ze po kazdym masz spacje. Czyli jesli chcesz ladnie to wywalic na ekran i kolorwac to co chesz to : najpierw porownujesz z tablicy km_slowa czy slowo jest tym czego szukasz. Jesli tak to ustawiasz kolor czy co tam chcesz i wywlasz. Wstawiasz spacje. I kolejne slowo. Warto zebys zwiekszyl sobie ilosc maksymalna slow, jesli to bedzie zwiazne z programowaniem bo roznie to bywa w zrodelkach.

  • Przedstawilem ci tu teorie. Teraz musisz to zrozumiec i wykozystac. To nie jest gotowe rozwiazanie :] Takie rzadko podaje :] Powodzenia

0

W PAS się kłaniam i do <ort>nużek </ort>padam szacownego kolegi!.

... po 5 dniach ( i nockach) poszedłem trochę dalej..i instalnąłem sobie pakiecik Scripter Studio..."i życie stało się prostsze" :)) To co było niemożliwe...nagle przestało istnieć.

Swoją drogą ciężko się napracowałeś i za to dziękuję NAPRAWDĘ serdecznie, niestety w tej chwili po 7 godzinach mam praktycznie skończony program oparty o w/w paczuszke. (Nie wiem co jest takiego pakiecie SynEdit, że przez 4 tygodnie próbowałem go "ugryźć" i się nie dało...:/ - niech go używają lepsi ode mnie.)

Dziękuję WSZYSTKIM serdecznie za pomoc i dobre chęci (one też się liczą!)

Do zobaczenia po obronie!

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