Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   CSV Textdatei, Zeilen sortieren (https://www.delphipraxis.net/169307-csv-textdatei-zeilen-sortieren.html)

schwa226 11. Jul 2012 10:52

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?

DeddyH 11. Jul 2012 10:57

AW: CSV Textdatei, Zeilen sortieren
 
Wenn das Datum im Format YYYY-MM-DD ist, sollte das mit Stringsortierung schon erledigt sein.

schlagzu 11. Jul 2012 10:59

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.

schlagzu 11. Jul 2012 11:02

AW: CSV Textdatei, Zeilen sortieren
 
http://www.delphipraxis.net/23672-split-funktion.html
http://www.delphibasics.co.uk/RTL.as...=StrToDateTime

schwa226 11. Jul 2012 11:24

AW: CSV Textdatei, Zeilen sortieren
 
Das Datum ist in diesem Format:
Zitat:

2012/07/10 12:07:21
Wenn ich die einzelenen Zeilene in einer StringListe habe kann ich sie ja nicht nach Datum sortieren weil ja die anderen Werte auch dabei sind, oder?
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.

mkinzler 11. Jul 2012 11:27

AW: CSV Textdatei, Zeilen sortieren
 
Man könnte auch ein CSV oder Memdataset verwenden.

Maya 11. Jul 2012 11:29

AW: CSV Textdatei, Zeilen sortieren
 
Wenn ein Stringlisteintrag bei dir das Schema hat
Code:
<date>,<name>,<address>,<value>
, dann dürfte es eigentlich reichen einfach die Eigenschaft "Sorted" auf True zu setzen von der Stringliste.

Haut mich, wenn ich falsch liege. :P

schlagzu 11. Jul 2012 11:41

AW: CSV Textdatei, Zeilen sortieren
 
ne, dann geht es.

loadfromfile
sort
savetofile

schwa226 11. Jul 2012 11:49

AW: CSV Textdatei, Zeilen sortieren
 
Danke!

Werde es mit dem einfachen Sort noch probieren!

Derweilen habe ich mir eine CustomSort geschrieben:
Delphi-Quellcode:
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;
EDIT:
Ja, Sort reicht aus ;)

DeddyH 11. Jul 2012 12:15

AW: CSV Textdatei, Zeilen sortieren
 
Hab ich doch gleich gesagt :mrgreen:


Alle Zeitangaben in WEZ +1. Es ist jetzt 12:09 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