Zeilen aus Text Datei nach Datum und Uhrzeit sortieren lassen
Abend,
Habe eine txt Datei mit rund 87000 Zeilen (bitte fragt nicht wo ich die her habe, brauche es für die schule).
Diese möchte ich jetzt nach Datum und Uhrzeit sortieren, weil die Werte zufällig verteilt sind.
Fängt mit 2004 an, geht dan 3 Monate 2005 und dan wider 2004 usw, alles unregelmäßig.
So sehen ein paar Beispiel Zeilen aus:
Nach langem hin und her, habe ich es nun endlich hin bekommen, das zumindest Datum und Uhrzeit in einer einheitlichen vorm vorliegen:
Es handelt sich jeweils um 3 Zeilen, irgendwie wurde ein Zeilenumbruch eingefügt, der nicht da ist.
Also die erste null bei einstelligen werten wurde ergänzt.
Jetzt hänge ich daran, die werte sortiert wider in einer txt Datei abzulegen.
Das Sortieren kann gerne mehre Stunden dauern, ist mir relativ egal, muss nur einmal durchlaufen werden, sollte dan aber auch schon gleich das richtige Ergebnis liefern.
Die Zeilen werden folgendermaßen eingelesen:
unten das mit str1 und 2 war ein versuch die werte andersherum anzuordnen, also falls das lohnenswert ist, dies liegt bereits vor.
Am Ende soll aber die gesamte Zeile in einer neuen txt Datei stehen.
Hoffentlich kann mir da einer von euch helfen.
zerbrüte mir seit Stunden den Kopf über dieser Datei.
Schonmal Danke für eine Antwort
Mfg
Power-Poler
Habe eine txt Datei mit rund 87000 Zeilen (bitte fragt nicht wo ich die her habe, brauche es für die schule).
Diese möchte ich jetzt nach Datum und Uhrzeit sortieren, weil die Werte zufällig verteilt sind.
Fängt mit 2004 an, geht dan 3 Monate 2005 und dan wider 2004 usw, alles unregelmäßig.
So sehen ein paar Beispiel Zeilen aus:
0:02:51 1.01.2005 0,80 216,21 0,08 88,03 4,12 11,00 -21,94
12:53:47 5.01.2005 1,29 201,42 0,09 85,23 1,57 10,92 12,97
22:12:48 21.12.2004 0,23 137,08 0,08 83,67 -2,56 11,26 -26,11
Nach langem hin und her, habe ich es nun endlich hin bekommen, das zumindest Datum und Uhrzeit in einer einheitlichen vorm vorliegen:
00:02:51 01.01.2005 0,80 216,21 0,08 88,03 4,12 11,00 -21,94
12:53:47 05.01.2005 1,29 201,42 0,09 85,23 1,57 10,92 12,97
22:12:48 21.12.2004 0,23 137,08 0,08 83,67 -2,56 11,26 -26,11
Es handelt sich jeweils um 3 Zeilen, irgendwie wurde ein Zeilenumbruch eingefügt, der nicht da ist.
Also die erste null bei einstelligen werten wurde ergänzt.
Jetzt hänge ich daran, die werte sortiert wider in einer txt Datei abzulegen.
Das Sortieren kann gerne mehre Stunden dauern, ist mir relativ egal, muss nur einmal durchlaufen werden, sollte dan aber auch schon gleich das richtige Ergebnis liefern.
Die Zeilen werden folgendermaßen eingelesen:
BufferedReader in = new BufferedReader(new FileReader("Pfad"));
String zeile = null;
String str = "";
String str1 = "";
String str2 = "";
while ((zeile = in.readLine()) != null) {
str = zeile.substring(0, 20);
StringTokenizer s = new StringTokenizer(str, " ", false);
int i;
i = 0;
while(s.hasMoreTokens()) {
str1 = s.nextToken();
str2 = s.nextToken();
System.out.println(str2 + " " + str1);
unten das mit str1 und 2 war ein versuch die werte andersherum anzuordnen, also falls das lohnenswert ist, dies liegt bereits vor.
Am Ende soll aber die gesamte Zeile in einer neuen txt Datei stehen.
Hoffentlich kann mir da einer von euch helfen.
zerbrüte mir seit Stunden den Kopf über dieser Datei.
Schonmal Danke für eine Antwort
Mfg
Power-Poler
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 205015
Url: https://administrator.de/forum/zeilen-aus-text-datei-nach-datum-und-uhrzeit-sortieren-lassen-205015.html
Ausgedruckt am: 21.02.2025 um 11:02 Uhr
11 Kommentare
Neuester Kommentar

Hallo Power-Poler!
Ersetze alle Leerzeichen durch "", dann bleiben nur noch Tabs als Trennzeichen übrig
Gruß Dieter
Ersetze alle Leerzeichen durch "", dann bleiben nur noch Tabs als Trennzeichen übrig
Gruß Dieter

Guten Abend,
hast Du denn eine Vorgabe, womit Du das machen sollst?
Sinnvoll ist wie christianlindloff oben schreibt Excel wenn man es denn unter Windows macht.
Oder man hat Linux und macht es mit Perl (oder einer anderen Skriptsprache).
Das Vorgehen ist klar, zunächst sorge dafür, dass jeder Datensatz in eine Zeile kommt. Dann kannst Du das mit Excel öffnen. Du musst nur dafür sorgen, dass Excel weiß, welches Zeichen als Trenner zwischen den Spalten zu nehmen ist.
Ich hab mir das gerade mal im Editor angesehen, im Moment sind zwischen den Spalten immer genau ein Tab gefolgt von mehreren Leerzeichen. Sinnvoll wäre es, zunächst(geht auch im Editor (kommt auf den Editor an)) diese Zeichen durch Semikolon zu ersetzen, das wird von Excel problemlos als Spaltentrenner verarbeitet.
Sortieren in Excel kannst Du nach einer beliebigen Spalte, also hier die zweite.
Markus
PS: das geht auch mit OpenOffice
hast Du denn eine Vorgabe, womit Du das machen sollst?
Sinnvoll ist wie christianlindloff oben schreibt Excel wenn man es denn unter Windows macht.
Oder man hat Linux und macht es mit Perl (oder einer anderen Skriptsprache).
Das Vorgehen ist klar, zunächst sorge dafür, dass jeder Datensatz in eine Zeile kommt. Dann kannst Du das mit Excel öffnen. Du musst nur dafür sorgen, dass Excel weiß, welches Zeichen als Trenner zwischen den Spalten zu nehmen ist.
Ich hab mir das gerade mal im Editor angesehen, im Moment sind zwischen den Spalten immer genau ein Tab gefolgt von mehreren Leerzeichen. Sinnvoll wäre es, zunächst
sed -n 's/\t\ \+/;/g' < Dateinname
Sortieren in Excel kannst Du nach einer beliebigen Spalte, also hier die zweite.
Markus
PS: das geht auch mit OpenOffice

Das ist auch für Linux, sed ist der stream-Editor. Sowas gibt's in Windows nicht. Von Batch hab ich keine Ahnung.
Wenn Du einen Editor hast, der mit Regulären Ausdrücken umgehen kann, dann kannst Du mit dem Codediese Ersetzung in der Datei machen. Das geht aber auch in jedem anderen Editor.
Markus
Wenn Du einen Editor hast, der mit Regulären Ausdrücken umgehen kann, dann kannst Du mit dem Code
s/\t\ \+/;/g
Markus
@ hmarkus
Grüße
bastla
Sowas gibt's in Windows nicht.
... aber natürlich für Windows, zB http://gnuwin32.sourceforge.net/packages/sed.htmGrüße
bastla

Ja klar, ich entsinne mich, dass wir vor einigen Wochen einen Thread hatten, wo sed.exe nicht wie erwartet funktionierte. Ich hab vor einigen Tagen mal mobaxterm ausprobiert, das basiert auf cygwin und stellt ein Linux-Terminal in Windows zur Verfügung. Sehr empfehlenswert.
Danke @bastla für den Hinweis.
Markus
Danke @bastla für den Hinweis.
Markus

Habe jetzt Notepad++ gemacht (hat auch schon ewisch gedauert) OpenOffice öffnet es jetzt normal.
Wie kann ich jetzt in OpenOffice die Werte sortieren lassen?
Daten -> Sortieren.... und dann den Schlüssel wählen.Wie kann ich jetzt in OpenOffice die Werte sortieren lassen?
Markus

Hier noch ein Einzeiler in mehreren Zeilen 
dabei ist text.txt die Datei mit den Daten. Es funktioniert nach dem Prinzip der Schwartz-Transformation. Nach dem Ersetzen von Tabs uns Leerzeichen durch Semikolon werden zunächst im Datum alle Tage zweistellig gemacht.
Danach werden tag/monat/jahr in jahr/monat/tag vertauscht.
Dann wird nach dem zweiten Feld sortiert.
Und im letzten Schritt die Vertauschung im Datum wieder Rückgängig gemacht.
Sollte auch in cygwin oder mobaxterm auf Windows laufen.
Markus
Edit: in mobaxterm muss man es anders schreiben. Z.B. im ersten Ausdruck [\t ]* für eine Folge von Tabs oder/und Leerzeichen.
sed -n 's/\t\+\ \+/;/gp' < text.txt |
sed 's/;\([0-9]\)\(.[0-9\{2\}.[0-9]\{4\}\)/\ 0\1\2/p' |
uniq |
sed -n 's/\([0-9]\{1,2\}\).\([0-9]\{2\}\).\([0-9]\{4\}\)/\3.\2.\1/p' |
sort -t ';' -k 2 |
sed -n 's/\([0-9]\{4\}\).\([0-9]\{2\}\).\([0-9]\{2\}\)/\3.\2.\1/p'
dabei ist text.txt die Datei mit den Daten. Es funktioniert nach dem Prinzip der Schwartz-Transformation. Nach dem Ersetzen von Tabs uns Leerzeichen durch Semikolon werden zunächst im Datum alle Tage zweistellig gemacht.
Danach werden tag/monat/jahr in jahr/monat/tag vertauscht.
Dann wird nach dem zweiten Feld sortiert.
Und im letzten Schritt die Vertauschung im Datum wieder Rückgängig gemacht.
Sollte auch in cygwin oder mobaxterm auf Windows laufen.
Markus
Edit: in mobaxterm muss man es anders schreiben. Z.B. im ersten Ausdruck [\t ]* für eine Folge von Tabs oder/und Leerzeichen.