Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Platzhalter in Dateinamen bei FindFirst (https://www.delphipraxis.net/155336-platzhalter-dateinamen-bei-findfirst.html)

Freiwilderer 19. Okt 2010 12:35

Platzhalter in Dateinamen bei FindFirst
 
Hi,
ich hab mal(wieder) ne frage.

Ich muss mehrere Datein einlesen, die unterschiedliche Dateinamenrichtlinien haben und in unterschiedlichen Ordnern liegen.
Jetzt hab ich mir dafür eine schleife gebaut, die alle relevanten ordner durchgeht und in den entsprechenden Ordnern einen jeweils anderen Dateinamens filter hat.
so weit so gut, läuft.
jetzt habe ich aber einen Dateifilter der so aussieht: '*LAB*.*'
das problem dabei ist, dass er zB die Dateien 'ALAB123.WIN'; 'LAB234.WIN' und '10LAB123.WIN';
einschließt.
er soll aber nur die '10LAB123.WIN' zulassen, sprich eine Datei, die vor dem LAB einen Integer wert hat.
gibt es dafür einen filter?
würde das gern über einen filter lösen, damit ich nicht anfangen muss den dateinamen auseinander zu pflücken.

über tips wäre ich dankbar,

vielen Dank im vorraus

mfg

Freiwilderer

Sir Rufo 19. Okt 2010 12:54

AW: Platzhalter in Dateinamen bei FindFirst
 
Nein geht nicht über den Filter, dass musst du im Nachhinein nochmals selber filtern.
Zum Prüfen könntest du dann RegEx benutzen

oder

Delphi-Quellcode:
function StringBefore( const SubStr, Str : string ) : string;
  var
    p : integer;
  begin
    p := Pos( SubStr, Str );
    if ( p = 0 ) then
      p := Length( Str )
    else
      p := p - 1;
    if ( p > 0 ) then
      Result := Copy( Str, 1, p )
    else
      Result := '';
  end;
und dann so prüfen
Delphi-Quellcode:
str := StringBefore( 'LAB', sr.Filename );
if StrToIntDef( str, 0 ) <> 0 then

himitsu 19. Okt 2010 13:31

AW: Platzhalter in Dateinamen bei FindFirst
 
FindFirst kenn nunmal nur die Platzhalter * und ?.
Es kann also nicht zwischen Buchstabe oder Zahl unterschieden werden.

'10LAB123.WIN' könnte man über '?*LAB?*.WIN' von 'LAB234.WIN' unterscheiden.
Aber 'ALAB123.WIN' würde sich nicht davon unterscheiden, da man so ja keine Buchstaben von Zahlen unterscheiden kann.


Lösung, du mußt erstmal alle Dateien auflisten und dann selber filtern.
Wie nun die Namen verglichen werden, ist dir überlassen und es gibt unmassen Möglichkeiten, wie z.B. das knuffige RegEx u.Ä.

Freiwilderer 19. Okt 2010 14:03

AW: Platzhalter in Dateinamen bei FindFirst
 
hi,
danke, hatte mir schon sowas gedacht, da dateinamen nunmal strings sind,
aber gehofft, dass es da vielleicht doch ne möglichkeit gibt

ich werd das dann über nen späteren filter lösen

danke nochmals

mfg


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:27 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