/** * vBulletin 3.8.7 CSS * Style: 'Elise'; Style ID: 2 */ @import url("clientscript/vbulletin_css/style-4652c8ca-00002.css"); Dateiliste sortieren - Delphi-PRAXiS
 
AGB  ·  Datenschutz  ·  Impressum  







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

Dateiliste sortieren

Ein Thema von kurtm1 · begonnen am 29. Jun 2010 · letzter Beitrag vom 29. Jun 2010
Antwort Antwort
kurtm1

Registriert seit: 12. Dez 2003
348 Beiträge
 
#1

Dateiliste sortieren

  Alt 29. Jun 2010, 19:59
Ich habe in einer Stringliste links zu Dateipfaden.

C:\Temp1\abc10.txt
C:\Temp1\abc1.txt
C:\Temp1\abc5.txt
C:\Temp10\7.txt
C:\Temp10\10.txt
C:\Temp10\1.txt

Rauskommen soll eine nach Ordnern und Dateien sortierte Liste:

C:\Temp1\abc1.txt
C:\Temp1\abc5.txt
C:\Temp1\abc10.txt
C:\Temp10\1.txt
C:\Temp10\7.txt
C:\Temp10\10.txt

Mit der Standard Sort Methode der Stringlist funktioniert das nicht..
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#2

AW: Dateiliste sortieren

  Alt 29. Jun 2010, 20:03
Du kannst auch einfach eine eigene Sortiermethode schreiben und diese der TStringList bekannt machen:

    procedure TStringList.CustomSort(Compare: TStringListSortCompare); virtual;
Delphi-Quellcode:

  function TForm1.DoSort(List: TStringList; Index1, Index2: Integer): Integer;
  var s1, s2 : String;
  begin s1:=List[Index1];
        s2:=List[index2];
        if s1>s2 then
         result:=1
        else
          if s2>s1 then
            result:=-1
        else
          result:=0;
         
  end;
Lars
  Mit Zitat antworten Zitat
kurtm1

Registriert seit: 12. Dez 2003
348 Beiträge
 
#3

AW: Dateiliste sortieren

  Alt 29. Jun 2010, 20:20
Das weiß ich allerdings weiß ich nicht wie ich das CustomSort für diesen Zweck korrekt umsetze
  Mit Zitat antworten Zitat
daywalker9

Registriert seit: 1. Jan 2010
Ort: Leer
594 Beiträge
 
Delphi XE3 Professional
 
#4

AW: Dateiliste sortieren

  Alt 29. Jun 2010, 20:27
Du bekommst ja die beiden Indices der String, die vergliechen werden. Dann vergleichst du die nach deinen Kriterien. Du könntest nun z.b. die beiden Strings Stück für Stück vergleichen. Probier das CustomSort doch mal aus und denk nach, wie du die vergleichen willst
Lars
  Mit Zitat antworten Zitat
kurtm1

Registriert seit: 12. Dez 2003
348 Beiträge
 
#5

AW: Dateiliste sortieren

  Alt 29. Jun 2010, 20:45
Die Standarsortierung bekomme ich auch hin (so wie Tstringlist.Sort):

Delphi-Quellcode:
  function DoSort(List: TStringList; Index1, Index2: Integer): Integer;
  var s1, s2 : String;
  begin
        s1:=List[Index1];
        s2:=List[index2];

        //wenn s1 ordner == s2 ordner
        if ExtractFilePath(s1)=ExtractFilePath(s2) then
          Result:=AnsiCompareStr(ExtractFileName(s1),ExtractFileName(s2))
        else
          Result:=AnsiCompareStr(ExtractFilePath(s1),ExtractFilePath(s2))
  end;
Probleme gibt es allerdings wenn ich Dateien nach diesem Muster habe:
aaa01
aaa09
aaa010

=> in diesem Fall wird nämlich folgendes ausgegeben:
aaa01
aaa010
aaa09
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#6

AW: Dateiliste sortieren

  Alt 29. Jun 2010, 20:51
Wundern tut das ja nicht, so arbeitet auch die interne Sortierung der StringList

Da hilft wohl nur parsen oder einen Mac kaufen (die sortieren so wie du das willst)

Hole dir aus den Dateinamen den String/Zahlenteil und den Rest
Code:
'aaa010\test1' => 'aaa',10,'\test1'
'aaa01\test2' => 'aaa',1,'\test2'
Jetzt vergleichen wir den String und Zahlenteil. Sind diese gleich, dann arbeiten wir nur mit dem Reststring weiter.
Also brauchen wir folgende Funktion:
procedure( const AStr : string; out OStr : string; out OInt : integer; out RStr : string );
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (29. Jun 2010 um 21:06 Uhr)
  Mit Zitat antworten Zitat
kurtm1

Registriert seit: 12. Dez 2003
348 Beiträge
 
#7

AW: Dateiliste sortieren

  Alt 29. Jun 2010, 21:33
ok, der code von hier macht es korrekt:

http://objectmix.com/delphi/402461-n...-tstrings.html
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: Dateiliste sortieren

  Alt 29. Jun 2010, 23:00
Dann arbeitet dein Delphi anders als meins. Der Code von da liefert mir folgende Sortierung:
Code:
C:\Temp1\abc1.txt
C:\Temp1\abc10.txt
C:\Temp1\abc5.txt
C:\Temp10\1.txt
C:\Temp10\10.txt
C:\Temp10\7.txt
Aber so wolltest du das nicht (oder am Anfang wenigstens nicht)
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Antwort Antwort


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 17:42 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