AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Dateiliste - Dateien und Verzeichnisse aussortieren anhand einer StringListe

Dateiliste - Dateien und Verzeichnisse aussortieren anhand einer StringListe

Ein Thema von Jim Carrey · begonnen am 14. Okt 2016 · letzter Beitrag vom 16. Okt 2016
Antwort Antwort
Jim Carrey
(Gast)

n/a Beiträge
 
#1

Dateiliste - Dateien und Verzeichnisse aussortieren anhand einer StringListe

  Alt 14. Okt 2016, 17:50
Ich erstelle mir eine Dateiliste mit FindFirst und FindNext.
Bei jeder Datei prüfe ich, ob diese in einer StringList steht und somit aussortiert werden soll oder nicht.

In der Stringlist kann zum Beispiel folgendes stehen
Code:
Verzeichnis1
Verzeichnis1 soll also komplett sammt Inhalt ignoriert werden.
Das bekomme ich nicht so ganz hin.

Verzeichnis1 bekomme ich ignoriert, aber nicht dessen Inhalt.

Ich prüfe aktuell ganz stupide etwa so bei jedem Datensatz der bei FindFirst/Next entgegen kommt:
Delphi-Quellcode:
for i := 0 to aStringList.Count - 1 do
 begin
  if aStringList.Strings[i] = sFindMe then // sFindMe kann zum Beispiel sein "Verzeichnis1" oder "Verzeichnis1\Datei.txt"...
   begin
    bRes := True;
    Break;
   end;
 end;
Dass hier Verzeichnis1\Datei.txt nicht ignoriert wird, ist ja sonnen-klar. Aber was für einen Vergleich müsste ich hier anstellen, damit das Verzeichnis sammt Inhalt ignoriert wird?
  Mit Zitat antworten Zitat
SProske

Registriert seit: 16. Feb 2015
Ort: Halle/S.
116 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: Dateiliste - Dateien und Verzeichnisse aussortieren anhand einer StringListe

  Alt 14. Okt 2016, 18:11
Evtl. reicht da ja schon System.StrUtils.AnsiStartsText?
Sebastian
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.680 Beiträge
 
Delphi 5 Professional
 
#3

AW: Dateiliste - Dateien und Verzeichnisse aussortieren anhand einer StringListe

  Alt 14. Okt 2016, 18:15
Ich bin verwirrt. Einerseits schreibst du, in deiner Stringliste könne sowas wie "Verzeichnis1" stehen. Andererseits schreibst du im Code, in der Variable sFindMe könne sowas wie "Verzeichnis1" stehen. Was steht in diesem Fall in aStringList.Strings[i]?

Grundsätzlich könntest du entweder deinen Suchterm auseinandernehmen (aka Pfad in Teile splitten und diese durchgehen) oder sowas wie Pos() benutzen. Aber aufpassen bei gleichnamigen Verzeichnissen an völlig unterschiedlichen Stellen im Dateisystem! Nur weil ein Verzeichnis namens "Windows" in deiner Liste steht, bedeutet das nicht, dass C:\Windows gemeint ist, es könnte auch D:\Tools\komplett\sinnfreier\Pfadname\Windows sein.

Grüße
Dalai
  Mit Zitat antworten Zitat
Jim Carrey
(Gast)

n/a Beiträge
 
#4

AW: Dateiliste - Dateien und Verzeichnisse aussortieren anhand einer StringListe

  Alt 14. Okt 2016, 18:26
Ich bin verwirrt. Einerseits schreibst du, in deiner Stringliste könne sowas wie "Verzeichnis1" stehen. Andererseits schreibst du im Code, in der Variable sFindMe könne sowas wie "Verzeichnis1" stehen. Was steht in diesem Fall in aStringList.Strings[i]?
Entschuldigung ich habe mich vertan. In sFindMe steht natürlich immer der aktuelle Datensatz von FindFirst/Next drin. Genauer gesagt SR.Name und das RootDir davon wird entfernt.

An das mit POS hatte ich auch schon gedacht aber genau deine angesprochene Problematik macht es so schwer für mich, dass ich das nicht korrekt umsetzen könnte.
  Mit Zitat antworten Zitat
t.roller
(Gast)

n/a Beiträge
 
#5

AW: Dateiliste - Dateien und Verzeichnisse aussortieren anhand einer StringListe

  Alt 14. Okt 2016, 18:52
Predicate
Eine Routine, mit der unerwünschte Ergebnisse herausgefiltert werden können.
http://docwiki.embarcadero.com/Libra...ctory.GetFiles
  Mit Zitat antworten Zitat
Benutzerbild von Dalai
Dalai

Registriert seit: 9. Apr 2006
1.680 Beiträge
 
Delphi 5 Professional
 
#6

AW: Dateiliste - Dateien und Verzeichnisse aussortieren anhand einer StringListe

  Alt 14. Okt 2016, 18:58
Entschuldigung ich habe mich vertan. In sFindMe steht natürlich immer der aktuelle Datensatz von FindFirst/Next drin. Genauer gesagt SR.Name und das RootDir davon wird entfernt.
Sowas hatte ich mir schon gedacht .

Zitat:
An das mit POS hatte ich auch schon gedacht aber genau deine angesprochene Problematik macht es so schwer für mich, dass ich das nicht korrekt umsetzen könnte.
Naja, die Sache ist doch einfach: Dann müssen auf deiner Ausschlussliste Dinge stehen, die eindeutig sind, oder sie müssen z.B. durch Wildcards auf alles passen. Ich denke da in Richtung Ausschlussliste von Rsync oder Ignorierliste von Total Commander, also z.B. "C:\Verzeichnis1" passt eben nur auf dieses Verzeichnis, "Verzeichnis1" passt auf alles mit diesem Namen irgendwo in der Struktur, "C:\Verzeichnis\*" passt auf dieses Verzeichnis und alles darunter.

Aber das musst du entscheiden, für welchen Anwendungsfall du das benötigtst, ob dir das ins Konzept passt usw.

Grüße
Dalai

Geändert von Dalai (14. Okt 2016 um 19:01 Uhr)
  Mit Zitat antworten Zitat
Jim Carrey
(Gast)

n/a Beiträge
 
#7

AW: Dateiliste - Dateien und Verzeichnisse aussortieren anhand einer StringListe

  Alt 14. Okt 2016, 19:08
GetFiles gucke ich mir in jedem Fall noch an.

Meine Überlegung gerade beim Einkaufen war so in etwa Pi Mal Daumen ......
Ich habe z.B. SR.Name = "C:\Verzeichnis1\Datei1.txt".
Jetzt übergebe ich SR.Name an meine Funktion, die durch meine StringList iteriert:

Delphi-Quellcode:
for i := 0 to aStringList.Count - 1 do
 begin
  if Pos(sFindMe, aStringList.Strings[i]) = 1 then
   begin
    bRes := True;
    Break;
   end;
 end;
In der StringList steht sagen wir mal ...
Code:
C:\Verzeichnis1\Datei1.txt
Wenn sFindMe also an Stelle 1 (Anfang) gefunden wird, ist die Bedingung erfüllt.

Wäre das ein Anfang oder denke ich gerade zu kompliziert wegen der Schokolade die in der Küche auf mich wartet?

Oder ich prüfe andersherum:
Delphi-Quellcode:
for i := 0 to aStringList.Count - 1 do
 begin
  if Pos(aStringList.Strings[i], sFindMe) = 1 then // HIER ANDERS HERUM
   begin
    bRes := True;
    Break;
   end;
 end;
Dann könnte in der StringList
Code:
C:\Verzeichnis1\
stehen und es würde trotzdem bei
Code:
C:\Verzeichnis1\Datei1.txt
zutreffen.

(was ausbaubedürftig wäre)

Geändert von Jim Carrey (14. Okt 2016 um 19:11 Uhr)
  Mit Zitat antworten Zitat
KaiW

Registriert seit: 5. Feb 2016
6 Beiträge
 
Delphi XE7 Architect
 
#8

AW: Dateiliste - Dateien und Verzeichnisse aussortieren anhand einer StringListe

  Alt 16. Okt 2016, 14:30
Hi Jim,

also wenn ich Dich richtig verstanden habe, stehen in der Stringliste sowohl Verzeichnisnamen als auch Dateinamen, die ausgeschlossen werden sollen.
Dann würde ich die Prüfung genau anders herum machen, also bei jeder gefunden Datei den kompletten Dateinamen inkl. Pfad in einer String-Variablen speichern und dann die Stringliste durchgehen und auf Vorkommen in dem Pfad testen. Also ähnlich Deinem Einfall beim Einkaufen, aber leicht abgeändert.

Klingt zugegebenermaßen etwas konfus, daher hier mal etwas Pseudocode:

Delphi-Quellcode:
ADateiname:= APfad + SR.Name; //SR ist ein TSearchRec, APfad ist der aktuelle mit FindFirst durchsuchte Pfad inkl. abschließendem "\"

AImFilter:= False;
FOR i:=0 TO SL.Count-1 DO
 begin
      IF Pos(SL[i], ADateiname) > 0 THEN
       begin
            AImFilter:= True;
            Break;
       end;
 end;

IF NOT AImFilter THEN
 begin
      //Datei verarbeiten
 end;
Es werden also alle "ausgefiltert", die einen der ausgeschlossenen Einträge aus der StringList im Dateinamen haben.

Wenn dann AFileName beispielsweise "c:\Verzeichnis1\datei1.txt" ist, könnte in der StringList (SL) sowohl "c:\Verzeichnis1\datei1.txt", als auch "c:\Verzeichnis1\" oder auch nur "Verzeichnis1" stehen, um die Datei auszuschließen.

War es in etwa das was Du gesucht hast?

Viele Grüße

Kai
  Mit Zitat antworten Zitat
Jim Carrey
(Gast)

n/a Beiträge
 
#9

AW: Dateiliste - Dateien und Verzeichnisse aussortieren anhand einer StringListe

  Alt 16. Okt 2016, 15:26
Danke für die Hilfe!

ich habe es jetzt so gelöst...
in meiner Datei stehen alle Pfade in absoluter Form. Z.B. D:\Verzeichnis1\*
In meiner Funktion wird nun geprüft, ob das letzte Zeichen ein * ist, wenn ja, wird es entfernt.
Dann wird geprüft, ob es sich um ein Verzeichnis oder um eine Datei handelt.

Und dann
Delphi-Quellcode:
sAktuellerPfad := sl.Strings[i];
if (bIsDirectory and (PosEx(sAktuellerPfad, sMeinPfad, 1) = 1)) or ((not bIsDirectory) and (sAktuellerPfad = sMeinPfad)) then
Wenn in der StringListe steht:
Zitat:
D:\Verzeichnis1\*
Dann wird D:\Verzeichnis1\ und alles was da drin ist aussortiert.

Und
Zitat:
D:\Verzeichnis1\Datei.txt
würde nur diese Datei aussortieren.

Aktuell noch umständlich und schlecht erweiterbar, aber ich gucke mal was sich machen lässt.

Ich prüfe jetzt also jeden Pfad der mit FindFirst gefunden wird mit allen Pfaden aus der StringList.
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:17 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