Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dateinamen auslesen und sortieren (https://www.delphipraxis.net/212811-dateinamen-auslesen-und-sortieren.html)

Nico B. 5. Apr 2023 11:34

Delphi-Version: XE7

Dateinamen auslesen und sortieren
 
Hallo zusammen,

ich finde einfach keine "einfache" Lösung für folgendes Problem.

Ich möchte Dateinamen aus einem Ordner auslesen und sortieren.
Dazu habe ich einen Ordner mit CSV-Dateien.
Folgende Dateien sind enthalten:
  • 1.3.csv
  • 1.6.csv
  • 1.7.csv
  • 2.3.csv
  • 2.6.1.csv
  • 2.6.2.csv
  • 2.6.3.csv
  • 2.8.csv
  • 2.12.csv
  • 4.5.csv
  • 4.8.csv
  • 4.9.1.csv
  • 4.9.2.csv
  • ....
Genau in dieser Reihenfolge werden mir die Dateien vom Windows-Explorer angezeigt.
Und genau in dieser Reihenfolge möchte ich die Dateien gern weiterverwenden.

Ich habe nun versucht die Dateinamen einzulesen und per Add in eine TStringList zu schreiben.
Dann rutscht die Datei 2.12.csv aber vor die 2.3.csv.
Also habe ich die TStringList.Sorted auf True gesetzt.
Das Ergebnis bleibt das gleiche.

Ich habe mich jetzt auch schon mit TStringList.CustomSort beschäftigt. Da steige ich aber nicht so richtig dahinter.
Außerdem scheint mir das auch relativ aufwendig.

Das Ergebnis muss auch nicht zwangsläufig in eine TStringList. Ich will eben nur die Dateien in der gleichen Reihenfolge verarbeiten wie sie mir im Windows-Explorer angezeigt werden.
Hat jemand eine Idee wie das geht?

DeddyH 5. Apr 2023 11:52

AW: Dateinamen auslesen und sortieren
 
Ist hier etwas für Dich dabei? https://www.delphipraxis.net/211914-...tringwert.html

Nico B. 5. Apr 2023 13:54

AW: Dateinamen auslesen und sortieren
 
Ich habe es wie beschrieben mit der Funktion in Verbindung mit CustomSort versucht.
Delphi-Quellcode:
CompareString(LOCALE_USER_DEFAULT, SORT_STRINGSORT or SORT_DIGITSASNUMBERS, PChar(S1),
    Length(S1), PChar(S2), Length(S2)) - CSTR_EQUAL;
Leider bleibt das Ergebnis das gleiche.

KodeZwerg 5. Apr 2023 14:10

AW: Dateinamen auslesen und sortieren
 
Habe es nur mal rasch mit FreePascal probiert und stelle nichts falsches fest wenn ich es so mache:
Code:
program Project1;

uses
  SysUtils, Classes;

function CompareProc(List: TStringList; Index1, Index2: Integer): Integer;
begin
  Result := string.Compare(List[Index1], List[Index2], [coIgnoreCase]);
end;

var
  SL: TStringList;
  i: Integer;
begin
  SL := TStringList.Create;
  try
    SL.Add('2.6.1.csv');
    SL.Add('4.5.csv');
    SL.Add('4.9.1.csv');
    SL.Add('1.3.csv');
    SL.Add('2.3.csv');
    SL.Add('2.6.2.csv');
    SL.Add('1.7.csv');
    SL.Add('4.9.2.csv');
    SL.Add('1.6.csv');
    SL.Add('2.8.csv');
    SL.Add('2.6.3.csv');
    SL.Add('4.8.csv');
    SL.Add('2.12.csv');
    SL.CustomSort(@CompareProc);
    for i := 0 to Pred(SL.Count) do
      WriteLn(SL[i]);
  finally
    SL.Free;
  end;
  ReadLn;
end.
Zitat:

1.3.csv
1.6.csv
1.7.csv
2.12.csv
2.3.csv
2.6.1.csv
2.6.2.csv
2.6.3.csv
2.8.csv
4.5.csv
4.8.csv
4.9.1.csv
4.9.2.csv
Macht Delphi da was anders?

Uwe Raabe 5. Apr 2023 14:21

AW: Dateinamen auslesen und sortieren
 
Bei Delphi klappt es mit folgender function:
Delphi-Quellcode:
function SortCompare(List: TStringList; Index1, Index2: Integer): Integer;
begin
  Result := string.Compare(List[Index1], List[Index2], [coDigitAsNumbers, coIgnoreCase]);
end;

Nico B. 6. Apr 2023 07:09

AW: Dateinamen auslesen und sortieren
 
Danke für die Antworten.

Ich habe es jetzt mit beiden Versionen probiert.
Allerdings ohne Erfolg...

haentschman 6. Apr 2023 07:59

AW: Dateinamen auslesen und sortieren
 
Quelltext der Versionen, Fehlermeldungen, Dateiliste, Ergebnis? ...wir haben keine Glaskugel. :zwinker:

himitsu 6. Apr 2023 09:18

AW: Dateinamen auslesen und sortieren
 
doch :glaskugel:


sorry, musste sein




Mal provieren die Punkte durch was anderes zu Replacen.
Nicht dass die Dortiermethode denkt intelligent zu sein und den . als Dezimaltrennzeichen ansieht,
denn 1.14 ist als "eine Zahl" wirklich kleiner, als 1.2

PaPaNi 6. Apr 2023 09:25

AW: Dateinamen auslesen und sortieren
 
Zitat:

Zitat von KodeZwerg (Beitrag 1520704)
Habe es nur mal rasch mit FreePascal probiert und stelle nichts falsches fest wenn ich es so mache:

Macht Delphi da was anders?

Wenn ich das richtig verstanden habe, das ist genau das Problem. 2.12 steht bei Dir vor 2.3. Gewollt ist aber anders, weil 12 > 3 ist. Oder irre ich mich?

PaPaNi 6. Apr 2023 10:01

AW: Dateinamen auslesen und sortieren
 
Zitat:

Zitat von Uwe Raabe (Beitrag 1520706)
Bei Delphi klappt es mit folgender function:
Delphi-Quellcode:
function SortCompare(List: TStringList; Index1, Index2: Integer): Integer;
begin
  Result := string.Compare(List[Index1], List[Index2], [coDigitAsNumbers, coIgnoreCase]);
end;

Bei mir funktioniert das auch.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:49 Uhr.
Seite 1 von 3  1 23      

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