AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dateinamen auslesen und sortieren

Ein Thema von Nico B. · begonnen am 5. Apr 2023 · letzter Beitrag vom 11. Apr 2023
Antwort Antwort
Seite 1 von 3  1 23      
Nico B.

Registriert seit: 16. Okt 2006
Ort: Riesa
67 Beiträge
 
Delphi XE7 Enterprise
 
#1

Dateinamen auslesen und sortieren

  Alt 5. Apr 2023, 12:34
Delphi-Version: XE7
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?
Nico Bäger
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.625 Beiträge
 
Delphi 12 Athens
 
#2

AW: Dateinamen auslesen und sortieren

  Alt 5. Apr 2023, 12:52
Ist hier etwas für Dich dabei? https://www.delphipraxis.net/211914-...tringwert.html
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Nico B.

Registriert seit: 16. Okt 2006
Ort: Riesa
67 Beiträge
 
Delphi XE7 Enterprise
 
#3

AW: Dateinamen auslesen und sortieren

  Alt 5. Apr 2023, 14:54
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.
Nico Bäger
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Dateinamen auslesen und sortieren

  Alt 5. Apr 2023, 15:10
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?
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.475 Beiträge
 
Delphi 12 Athens
 
#5

AW: Dateinamen auslesen und sortieren

  Alt 5. Apr 2023, 15:21
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;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Nico B.

Registriert seit: 16. Okt 2006
Ort: Riesa
67 Beiträge
 
Delphi XE7 Enterprise
 
#6

AW: Dateinamen auslesen und sortieren

  Alt 6. Apr 2023, 08:09
Danke für die Antworten.

Ich habe es jetzt mit beiden Versionen probiert.
Allerdings ohne Erfolg...
Nico Bäger
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.388 Beiträge
 
Delphi 12 Athens
 
#7

AW: Dateinamen auslesen und sortieren

  Alt 6. Apr 2023, 08:59
Quelltext der Versionen, Fehlermeldungen, Dateiliste, Ergebnis? ...wir haben keine Glaskugel.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#8

AW: Dateinamen auslesen und sortieren

  Alt 6. Apr 2023, 10:18
doch


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
$2B or not $2B
  Mit Zitat antworten Zitat
Benutzerbild von PaPaNi
PaPaNi

Registriert seit: 31. Mär 2022
47 Beiträge
 
#9

AW: Dateinamen auslesen und sortieren

  Alt 6. Apr 2023, 10:25
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?
  Mit Zitat antworten Zitat
Benutzerbild von PaPaNi
PaPaNi

Registriert seit: 31. Mär 2022
47 Beiträge
 
#10

AW: Dateinamen auslesen und sortieren

  Alt 6. Apr 2023, 11:01
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      

 

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 10:29 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