Wyszukiwanie wszystkich elementów tablicy

0
const
  Tablica : array[0..1] of String = (
  'pierwszy', 'Drugi');

procedure TfrMain.FileSearch(const PathName, FileName : string; const InDir : boolean);
var 
Rec  : TSearchRec;
i : integer;

begin
Path := IncludeTrailingBackslash(PathName);
if FindFirst(tablica + FileName, faAnyFile - faDirectory, Rec) = 0 then
 try
   repeat

     for i:=1 to tablica.length do   // << tu sie czepia, tak wiem, ze nuubsko,ale nie wiem jak to zrobic dlatego was prosze o pomoc:)
     ListBox1.Items.Add(tablica[i] + Rec.Name);
     i:=i+1;
   until FindNext(Rec) <> 0;
 finally
   FindClose(Rec);
 end;

Czy mogłby mi ktos pomoc to ogarnac? Chce przeszukiwac wszystkie elementy z tej tablicy wraz z dopisaniem rozszerzenia z funkcji szukającej.
Pozdro

2

Sam napisałeś że tablica 0..1 zas w pętli próbujesz iterować 1..2
Może wróć do podstaw na razie.

0

Ja bym to zrobił na funkcjach czysto WinAPI. Ponieważ pod pewnymi IDE jest problem z faAnyFile. Poczytaj też jak się używa funkcji Length i tablic, bo jakieś herezje tutaj tworzysz jak widzę. Wszystko jest opisane na mnóstwie stron w Google.

Poza tym dlaczego znowu ktoś musi nadawać swojemu wątkowi tag z czterech liter wzięty. Na prawde tak trudno wpisać tam język / IDE? Odnosze wrażenie, że wiele osób tutaj ma w poważaniu sugestie przy tagowaniu, że należy podać język. Chyba w odpowiedzi na to trzeba będzie być równie złośliwym i z automatu za takie głupie tagowania wrzucać wątek do Kosza.

0

spróbuj w ten sposób

for i:=0 to high(tablica) do 
begin
////......
end 
0

@Asphyxx - odnośnie używania macierzy dostałeś już wskazówki - czas przypomnieć sobie funkcje Low i High; Co do kodu - używasz funkcji IncludeTrailingBackslash, która jest pozostawiona tylko ze względów wstecznej kompatybilności:

Path := IncludeTrailingBackslash(PathName);

Zapoznaj się więc z funkcją IncludeTrailingPathDelimiter i ją wykorzystaj w programie; Zobacz też na procedurę Inc bo jej jak widać jeszcze nie znasz.

0

Dziękuję wszystkim za odpowiedzi.

W tym momencie przedstawia sie to u mnie tak :

procedure TfrMain.FileSearch(const PathName, FileName : string; const InDir : boolean);
var Rec  : TSearchRec;
    Path : string;
    i : integer;
begin
if FindFirst(Path + FileName, faAnyFile - faDirectory, Rec) = 0 then
 try
   repeat
   for i:=1 to high(tablica) do   // << tu sie czepia, tak wiem, ze nuubsko,ale nie wiem jak to zrobic dlatego was prosze o pomoc:)
      showmessage(tablica[i]);
      ListBox1.Items.Add(tablica[i] + Rec.Name);
      Inc(i,1);
   until FindNext(Rec) <> 0;
 finally
   FindClose(Rec);
 end;

I działa, lecz nie do konca jeszce tak jak bym chcial, jest mianowicie jeszcze problem z jedną rzeczą.

Gdy chcę wywolac funkcje szukania :

ListBox1.Clear;
  lblNumberFound.Caption:=Inttostr(ListBox1.Items.Count) + ' files found.';
  FileSearch(Edit1.Text, Tablica , CheckBox1.State in [cbChecked]);
//<< Tutaj wlasnie czepią sie o tą tablice. A chcialbym, zeby wyszukiwało wszystkie elementy pokolei z listy , wszystkie stringi pokolei, jakies pomysły? 

pozdrawiam i dzięki za rady

0

@Asphyxx - jeśli jeszcze raz napiszesz, że "czepia się" to wątek poleci z hukiem do kosza; Albo podaj treść błędu, ostrzeżenia czy hinta, albo udawaj, że nic na ten temat nie wiesz;

Po co jest argument InDir, skoro i tak z niego nie korzystasz? Po co Ci zmienna Path, skoro nawet jej nie inicjujesz? Nie ustalasz jej wartości, ale używasz ją w funkcji FindFirst;

Ja nadal nie wiem co Ty w ogóle chcesz zrobić, bo z tego kodu nic nie wynika - jedna nic nie mówiąca plątanina; Zakładam więc, że potrzebujesz przeszukać dwa katalogi i dodać do komponentu nazwy znalezionych plików; Nazwy katalogów podawane są jako tablica, bo używanie do tego celu macierzy globalnej jest wieśniackie; Przykładowa metoda wyszukująca:

procedure TForm1.FileSearch(ADirectories: array of String; AFileName: String; AList: TListBox);
var
  srFile: TSearchRec;
  I: Integer;
begin
  for I := Low(ADirectories) to High(ADirectories) do
  begin
    ADirectories[I] := IncludeTrailingPathDelimiter(ADirectories[I]);

    if FindFirst(ADirectories[I] + AFileName, faAnyFile - faDirectory, srFile) = 0 then
    try
      repeat
        AList.Items.Add(ADirectories[I] + srFile.Name);
      until FindNext(srFile) <> 0;
    finally
      FindClose(srFile);
    end;
  end;
end;

i jej użycie w programie (poniżej przykład użycia dla zdarzenia OnClick przycisku):

procedure TForm1.Button1Click(Sender: TObject);
begin
  FileSearch(['C:\Foo\', 'C:\Bald\'], '*.*', ListBox1);
end;

Jak widzisz ścieżki podawane są statycznie, ale nic nie stoi na przeszkodzie aby podać stałą macierz:

procedure TForm1.Button1Click(Sender: TObject);
const
  DIRECTORIES: array [0 .. 1] of String = ('C:\Foo\', 'C:\Bald\');
begin
  FileSearch(DIRECTORIES, '*.*', ListBox1);
end;

Jeśli nie o to Ci chodziło, to proszę wytłumacz po ludzku jak ma ten algorytm działać, podając przy okazji cenne informacje, a nie jakieś tam "czepia się"... :]

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