Ĺadny brzuch
Więc tak: Mm kilka folderów i w kazdym jest jeden plik tekstowy. No i tu jest problem. Chcę te pliki przeszukiwać (wpisuję w aplikacji słowo) i ma mi wyswietlić wszystkie linijki z wszystkich plików, w List Boxie, w których dane słowo sie znajduje. Musi omijac wielkość liter. Mam nadzieję, że ktoś mi odpowie :):)
Sprawa ma się tak, że przerobiłem procedurę, którą umiesciłem w FAQ.
1. W Sekcji private deklarujemy procedurę:
procedure Szukaj(katalog: string; const slowo, roz: ShortString);
2. Tak wyglada jej kod:
procedure TForm1.Szukaj(katalog: string; const slowo, roz: ShortString); const ext = '*.*'; //narazie wszytskie pliki var SR: TSearchRec; S: string; //linijka ze słowem plik: TextFile; //plik tekstowy begin if katalog[length(katalog)] <> '\' then katalog := katalog + '\'; //dopisanie znaku '/' jesli go nie ma if FindFirst(katalog + ext, faAnyFile, SR) <> 0 then EXIT; //jesli nie wyszukano plików to wyjscie z procedury while FindNext(SR) = 0 do begin if ((sr.Attr and faDirectory) <> 0) and ( SR.Name <> '..') then szukaj(katalog + SR.Name + '\', slowo, roz) //jesli plik jest katalogiem to wchodzimy do niego i w nim szukamy else //w przeciwnym razie begin if (SR.Name <> '..') and (Sr.Name <> '.') and (lowercase(ExtractFileExt(SR.Name)) = '.' + roz) then begin //jesli rozszerzenie nam sie zgadza oraz plik nie jest '..' i '.' AssignFile(plik, katalog + SR.Name); //przypisujemy sciezke do pliku try Reset(plik); //otwieamy plik while not Eof(plik) do //petla begin readln(plik, S); //odczytanie linii if Pos(lowercase(slowo), S) <> 0 then //jesli w linijce znajduje sie szukane słowo Memo1.Lines.Add(S); //to dodajemy do memo ta linijke end; finally closeFile(plik); //na koniec zamykamy plik end; end; end; Application.ProcessMessages; end; end;
3. A tak ją wywołujemy:
Szukaj('C:\', 'komputer', 'txt');
Naturalnie 'C:\' możemy sobie zmienić, a 'komputer' to słowo jakie musi być w pliku. 'txt' pozostawiamy bez zmian.
Sprawdzałem u siebie - działa w miare dobrze. :)
Użytkownik programista1101 edytował ten post 27 maj 2005, 07:41
Dziękli, działa!! Działa!!
nigdy nie widziałem takiego forum
zanotowane.pl doc.pisz.pl pdf.pisz.pl zsf.htw.pl
Sprawa ma się tak, że przerobiłem procedurę, którą umiesciłem w FAQ.
1. W Sekcji private deklarujemy procedurę:
procedure Szukaj(katalog: string; const slowo, roz: ShortString);
2. Tak wyglada jej kod:
procedure TForm1.Szukaj(katalog: string; const slowo, roz: ShortString); const ext = '*.*'; //narazie wszytskie pliki var SR: TSearchRec; S: string; //linijka ze słowem plik: TextFile; //plik tekstowy begin if katalog[length(katalog)] <> '\' then katalog := katalog + '\'; //dopisanie znaku '/' jesli go nie ma if FindFirst(katalog + ext, faAnyFile, SR) <> 0 then EXIT; //jesli nie wyszukano plików to wyjscie z procedury while FindNext(SR) = 0 do begin if ((sr.Attr and faDirectory) <> 0) and ( SR.Name <> '..') then szukaj(katalog + SR.Name + '\', slowo, roz) //jesli plik jest katalogiem to wchodzimy do niego i w nim szukamy else //w przeciwnym razie begin if (SR.Name <> '..') and (Sr.Name <> '.') and (lowercase(ExtractFileExt(SR.Name)) = '.' + roz) then begin //jesli rozszerzenie nam sie zgadza oraz plik nie jest '..' i '.' AssignFile(plik, katalog + SR.Name); //przypisujemy sciezke do pliku try Reset(plik); //otwieamy plik while not Eof(plik) do //petla begin readln(plik, S); //odczytanie linii if Pos(lowercase(slowo), S) <> 0 then //jesli w linijce znajduje sie szukane słowo Memo1.Lines.Add(S); //to dodajemy do memo ta linijke end; finally closeFile(plik); //na koniec zamykamy plik end; end; end; Application.ProcessMessages; end; end;
3. A tak ją wywołujemy:
Szukaj('C:\', 'komputer', 'txt');
Naturalnie 'C:\' możemy sobie zmienić, a 'komputer' to słowo jakie musi być w pliku. 'txt' pozostawiamy bez zmian.
Sprawdzałem u siebie - działa w miare dobrze. :)
Użytkownik programista1101 edytował ten post 27 maj 2005, 07:41
Dziękli, działa!! Działa!!
nigdy nie widziałem takiego forum