AGB  ·  Datenschutz  ·  Impressum  







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

CSV Textdatei, Zeilen sortieren

Ein Thema von schwa226 · begonnen am 11. Jul 2012 · letzter Beitrag vom 11. Jul 2012
Antwort Antwort
schwa226

Registriert seit: 4. Apr 2008
400 Beiträge
 
#1

CSV Textdatei, Zeilen sortieren

  Alt 11. Jul 2012, 11:52
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?
Delphi 2010, Update 4 & 5
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: CSV Textdatei, Zeilen sortieren

  Alt 11. Jul 2012, 11:57
Wenn das Datum im Format YYYY-MM-DD ist, sollte das mit Stringsortierung schon erledigt sein.
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
schlagzu

Registriert seit: 11. Okt 2010
86 Beiträge
 
Delphi XE Starter
 
#3

AW: CSV Textdatei, Zeilen sortieren

  Alt 11. Jul 2012, 11:59
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.
  Mit Zitat antworten Zitat
schlagzu

Registriert seit: 11. Okt 2010
86 Beiträge
 
Delphi XE Starter
 
#4

AW: CSV Textdatei, Zeilen sortieren

  Alt 11. Jul 2012, 12:02
http://www.delphipraxis.net/23672-split-funktion.html
http://www.delphibasics.co.uk/RTL.as...=StrToDateTime
  Mit Zitat antworten Zitat
schwa226

Registriert seit: 4. Apr 2008
400 Beiträge
 
#5

AW: CSV Textdatei, Zeilen sortieren

  Alt 11. Jul 2012, 12:24
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.
Delphi 2010, Update 4 & 5
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: CSV Textdatei, Zeilen sortieren

  Alt 11. Jul 2012, 12:27
Man könnte auch ein CSV oder Memdataset verwenden.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Maya
Maya

Registriert seit: 15. Jun 2011
Ort: Potsdam-Mittelmark
107 Beiträge
 
Delphi 2010 Enterprise
 
#7

AW: CSV Textdatei, Zeilen sortieren

  Alt 11. Jul 2012, 12:29
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.
Status:
- FIAE
- Rechteinhaberin, ein Rüsselmops sein zu wollen
  Mit Zitat antworten Zitat
schlagzu

Registriert seit: 11. Okt 2010
86 Beiträge
 
Delphi XE Starter
 
#8

AW: CSV Textdatei, Zeilen sortieren

  Alt 11. Jul 2012, 12:41
ne, dann geht es.

loadfromfile
sort
savetofile
  Mit Zitat antworten Zitat
schwa226

Registriert seit: 4. Apr 2008
400 Beiträge
 
#9

AW: CSV Textdatei, Zeilen sortieren

  Alt 11. Jul 2012, 12:49
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
Delphi 2010, Update 4 & 5

Geändert von schwa226 (11. Jul 2012 um 12:52 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

AW: CSV Textdatei, Zeilen sortieren

  Alt 11. Jul 2012, 13:15
Hab ich doch gleich gesagt
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
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 11:46 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