Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi in dateinamen nach einem wort suchen (https://www.delphipraxis.net/10816-dateinamen-nach-einem-wort-suchen.html)

horst 25. Okt 2003 20:12


in dateinamen nach einem wort suchen
 
hallo
ich habe in einem verzeichnis x textfiles mit bestimmten dateinamen.
wie kann ich in diesen dateinamen nach einem wort suchen und das ergebnis in einer valuelisteditor-kompo ausgeben.
in der valuelisteditor-kompo steht dann quasi der dateiname ohne *.txt

grüße horst

APP 25. Okt 2003 20:29

Re: in dateinamen nach einem wort suchen
 
Hallo horst,
meinst Du so?

Delphi-Quellcode:
PROCEDURE TForm1.Button6Click(Sender: TObject);
   PROCEDURE DirList(CONST Path: STRING; FileList: TStrings);
   VAR
      SearchR                     : TSearchRec;
   BEGIN
      // Bestimmte Dateien suchen -> *.TXT
      IF FindFirst(Path + '*.TXT', faAnyFile, SearchR) = 0 THEN
         REPEAT
            IF (SearchR.Attr <> faDirectory) THEN
               BEGIN
                  // nach einem Wort im Dateinamen suchen
                  // pos ist CaseInsensitive!
                  IF POS('x', SearchR.Name) <> 0 THEN
                        FileList.Add(ChangeFileExt(SearchR.Name, '')); // [EDIT] ohne Extension [/EDIT]
               END;
         UNTIL FindNext(SearchR) <> 0;
      FindClose(SearchR);
   END;

BEGIN
   DirList('C:\', ListBox1.Items);
END;

horst 25. Okt 2003 20:40

Re: in dateinamen nach einem wort suchen
 
das funktioniert echt super...bigthx.
habe nochmal darüber nachgedacht und festgestellt das es doch noch etwas anders sein muss.
die dateien sind nicht nur in einem ordner sondern in mehreren ordnern...
wie kann ich im valuelisteditor in der linken spalte den ordnernamen und in der rechten spalte den gefundenen dateinamen darstellen und nicht in einer listbox?
so ungefähr:
http://www.fusshoeller.com/screens/value.gif

grüße horst

APP 25. Okt 2003 21:28

Re: in dateinamen nach einem wort suchen
 
Hallo horst,


Zitat:

Zitat von horst
...nicht nur in einem ordner sondern in mehreren ordnern...

Wenn Du die Funktion mehrmals aufrufst, dann gibts auch Ergebnisse für mehrere Ordner.
Zitat:

Zitat von horst
...valuelisteditor...

:?:
Meinst Du ein StringGrid?

Ich habs mal schnell umgebaut (Benötig zusätzlich ein StringGrid):
Delphi-Quellcode:
PROCEDURE TForm1.Button6Click(Sender: TObject);
VAR
   aStringList                    : TStringList;

   FUNCTION GetDirName(CONST aDir: STRING): STRING;
   VAR
      i                           : Integer;
   BEGIN
      result := '';
      IF aDir = '' THEN Exit;
      FOR i := Length(aDir) - 2 DOWNTO 0 DO
         BEGIN
            IF aDir[i] = '\' THEN
               BEGIN
                  Result := Copy(aDir, i + 1, Length(aDir) - i - 1);
                  Exit;
               END;
         END;
      // Root "c:\"
      Result := Copy(aDir, 1, 1);
   END;

   PROCEDURE DirList(CONST Path: STRING; CONST aExtension: STRING; CONST aFilter: STRING; FileList: TStrings);
   VAR
      SearchR                     : TSearchRec;
   BEGIN
      // Bestimmte Dateien suchen -> *.TXT
      IF FindFirst(Path + aExtension, faAnyFile, SearchR) = 0 THEN
         REPEAT
            IF (SearchR.Attr <> faDirectory) THEN
               BEGIN
                  // nach einem Wort im Dateinamen suchen
                  // pos ist CaseInsensitive!
                  IF POS(aFilter, SearchR.Name) <> 0 THEN
                     BEGIN
                        FileList.Add(Path + SearchR.Name);
                     END;
               END;
         UNTIL FindNext(SearchR) <> 0;
      FindClose(SearchR);
   END;
VAR
   i                              : Integer;

BEGIN
   aStringList := TStringList.Create;
   TRY
      // 1. Parameter :Verzeichnis, 2. Par: Extension, 3. Par: Filter, 4. Par. eine Stringliste
      DirList('C:\', '*.TXT', 'e', aStringList);
      DirList('C:\DTS\TESTS\Watcher\', '*.TXT', 'e', aStringList);
      FOR i := 0 TO aStringList.Count - 1 DO
         BEGIN
            // 1. Spalte: Name des Directories
            StringGrid1.Cells[0, i + 1] := GetDirName(ExtractFilePath(aStringList.Strings[i]));
            // 2. Spalte: Filenamen ohne Extension
            StringGrid1.Cells[1, i + 1] := ChangeFileExt(ExtractFileName(aStringList.Strings[i]), '');
         END;
   FINALLY
      aStringList.Free;
   END;
END;

horst 25. Okt 2003 21:40

Re: in dateinamen nach einem wort suchen
 
genau das ist es...perfekt, bigthx :balloon:

APP 25. Okt 2003 21:52

Re: in dateinamen nach einem wort suchen
 
hallo horst,

ACHTUNG:
Ich habe gerade erfahren, dass POS in D5 Casesensitive ist,
daher solltest Du bei Bedarf
Delphi-Quellcode:
IF POS(AnsiLowerCase(aFilter), AnsiLowerCase(SearchR.Name)) <> 0 THEN
schreiben (alles wird in Kleinbuchstaben gewandelt und dann verglichen).

horst 25. Okt 2003 22:04

Re: in dateinamen nach einem wort suchen
 
genau das wäre meine nächste frage gewesen ...
:hi:


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:14 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz