2016-11-16 1 views
5

Ich habe eine Reihe von Dateien, die verschiedene Dateipfade und Dateinamen haben, alle Dateinamen haben die gleiche Erweiterung, aber die Verzeichnisnamen oder Pfade sind alle unterschiedlich und haben sich auf das Laden der Dateien in a eingestellt Tztringlist und ich versuche sie in die Reihenfolge der Dateinamen zu sortieren, obwohl sie auch die Pfade haben.Delphi XE2 Sortieren Tztringliste nach Dateiname

Hier ist ein Beispiel für die Saiten in dem TStringList: -

c:\directory 1\AboutUs.lnk 
c:\directory something\AAHelp.lnk 
c:\directory anything\AAATalk.lnk 

Wenn durch den Dateinamen Teil der Zeichenfolge sortiert, mit dem ich am Ende möchte.

Mit anderen Worten möchte ich in der Lage sein, die Zeichenfolgen mit Pfad durch den Dateinamen Teil der Zeichenfolge zu sortieren.

Jede Hilfe wäre willkommen !.

Antwort

6

Verwendung TStringList.CustomSort():

function Compare(List: TStringList; Index1, Index2: Integer): Integer; 
begin 
    Result := CompareStr(
    LowerCase(ExtractFileName(List[Index1])), 
    LowerCase(ExtractFileName(List[Index2])) 
); 
end; 

// Then, just call: 
YourStrList.CustomSort(Compare); 
+1

Dieser Ansatz funktioniert, aber es könnte durchaus eine schlechte Leistung haben. Warum? Weil Sie bei diesem Ansatz 'ExtractFileName' zweimal für jeden Vergleich aufrufen. Wie viele Vergleiche benötigt werden, hängt weitgehend davon ab, welcher Sortieralgorithmus verwendet wird. Daher würde ich empfehlen, die Daten vorzubereiten (Dateinamen zu extrahieren), bevor Sie sortieren. Dies könnte den Prozess erheblich beschleunigen, da Sie 'ExtractFileName' nur einmal für jedes Listenelement aufrufen müssen. – SilverWarior

+1

Oder ein noch besserer Ansatz wäre, Ihre Daten so vorzubereiten, dass sie als Zeichenfolgenpaare gespeichert werden, wobei eine Zeichenfolge den Dateipfad und die andere den Dateinamen darstellt. Dies würde es Ihnen auch ermöglichen, eine so genannte "Multi-Parameter" -Sortierung zu implementieren, bei der Sie Ihre Daten zunächst nach Dateinamen sortieren würden und wenn Sie mehrere Dateien mit demselben Namen hätten, würden Sie sie nach ihrem Pfad sortieren. – SilverWarior

+0

@SilverWarior, ich verstehe Ihren Standpunkt über die Optimierung. Sie können eine Antwort zur Umsetzung Ihrer Idee posten und ich würde Ihnen gerne vorschlagen, die akzeptierte Antwort zu ändern. – karliwson

Verwandte Themen