![]() |
CSV Textdatei, Zeilen sortieren
Hallo!
Ich habe eine Text Datei, die Daten durch CSV getrennt enthält. Nun will ich die Zeilen der Textdatei nach dem Datum sortieren. Die Zeilen sind so aufgebaut: <date>,<name>,<address>,<value> Also alle Zeilen in eine Stringlist einlesen (LoadFromFile), aber wie dann nach <date> sortieren? |
AW: CSV Textdatei, Zeilen sortieren
Wenn das Datum im Format YYYY-MM-DD ist, sollte das mit Stringsortierung schon erledigt sein.
|
AW: CSV Textdatei, Zeilen sortieren
Trennen des Strings an den Kommas, dann Datum zu TDate oder TDateTime und dann sortieren. Passende Sortieralgorithmen (natürlich muss man die anpassen) findest du hier im Forum.
|
AW: CSV Textdatei, Zeilen sortieren
|
AW: CSV Textdatei, Zeilen sortieren
Das Datum ist in diesem Format:
Zitat:
Jedes Item der Stringlist hat ja dann den Inhalt <date>,<name>,<address>,<value>. Wenn ich nun jede einzelne Zeile auch noch in eine Stringliste zerlege habe ich zwar direkten Zugriff auf <date> aber es bringt mir nichts die Zeile selber selber zu sortieren. Ich will ja die Zeilen untereinander sortieren und nicht jede Zeile mit seinen Werten selber. Oder muss ich mir sozusagen eine CustomSort Funktion schreiben die sich aus zwei Zeilen die <date> rausholt und somit dann einen Vergleich macht. |
AW: CSV Textdatei, Zeilen sortieren
Man könnte auch ein CSV oder Memdataset verwenden.
|
AW: CSV Textdatei, Zeilen sortieren
Wenn ein Stringlisteintrag bei dir das Schema hat
Code:
, dann dürfte es eigentlich reichen einfach die Eigenschaft "Sorted" auf True zu setzen von der Stringliste.
<date>,<name>,<address>,<value>
Haut mich, wenn ich falsch liege. :P |
AW: CSV Textdatei, Zeilen sortieren
ne, dann geht es.
loadfromfile sort savetofile |
AW: CSV Textdatei, Zeilen sortieren
Danke!
Werde es mit dem einfachen Sort noch probieren! Derweilen habe ich mir eine CustomSort geschrieben:
Delphi-Quellcode:
EDIT:
function CompareDates(List: TStringList; Index1, Index2: Integer): Integer;
var d1, d2: TDateTime; p1, p2 : Integer; FormatSettings: TFormatSettings; begin p1 := Pos(',', List[Index1]) - 1; p2 := Pos(',', List[Index2]) - 1; if (p1 = 0) or (p2 = 0) then begin Result := -1; Exit; end; FormatSettings.TwoDigitYearCenturyWindow:=1; FormatSettings.DateSeparator:='/'; FormatSettings.TimeSeparator:=':'; FormatSettings.ShortTimeFormat:= 'hh:nn'; FormatSettings.LongTimeFormat:= 'hh:nn:ss'; FormatSettings.ShortDateFormat:= 'yy.mm.dd'; FormatSettings.LongDateFormat:= 'yyyy.mm.dd'; try d1 := StrToDateTime(LeftStr(List[Index1], p1), FormatSettings); d2 := StrToDateTime(LeftStr(List[Index2], p2), FormatSettings); except Result := -1; Exit; end; if d1 < d2 then Result := -1 else if d1 > d2 then Result := 1 else Result := 0; end; Ja, Sort reicht aus ;) |
AW: CSV Textdatei, Zeilen sortieren
Hab ich doch gleich gesagt :mrgreen:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz