Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Zeilen aus Text Datei nach Datum und Uhrzeit sortieren lassen

Frage Entwicklung Java

Mitglied: Power-Poler

Power-Poler (Level 1) - Jetzt verbinden

15.04.2013, aktualisiert 19:26 Uhr, 3232 Aufrufe, 11 Kommentare, 2 Danke

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:
01.
 0:02:51	 1.01.2005	      0,80	    216,21	      0,08	     88,03	      4,12	     11,00	    -21,94 
02.
12:53:47	 5.01.2005	      1,29	    201,42	      0,09	     85,23	      1,57	     10,92	     12,97 
03.
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:

01.
00:02:51	01.01.2005	      0,80	    216,21	      0,08	     88,03	      4,12	     11,00	    -21,94 
02.
12:53:47	05.01.2005	      1,29	    201,42	      0,09	     85,23	      1,57	     10,92	     12,97 
03.
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:

01.
			BufferedReader in = new BufferedReader(new FileReader("Pfad")); 
02.
			String zeile = null; 
03.
			String str = ""; 
04.
			String str1 = ""; 
05.
			String str2 = ""; 
06.
			while ((zeile = in.readLine()) != null) { 
07.
               str = zeile.substring(0, 20); 
08.
                
09.
                
10.
                StringTokenizer s = new StringTokenizer(str, "	", false); 
11.
 
12.
                 
13.
				int i; 
14.
				 
15.
 
16.
				i = 0; 
17.
				 
18.
				while(s.hasMoreTokens()) { 
19.
	                str1 = s.nextToken(); 
20.
	                str2 = s.nextToken(); 
21.
					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
Mit freundlichen Grüßen
Power-Poler
Mitglied: christianlindloff
15.04.2013 um 19:33 Uhr
Hallo Power Poler,

Ich habe leider keine Ahnung vom Programmieren. Aber eine andere Idee wäre es die Daten in eine Excel Tabelle zu kopieren und dort weiter aus zu werten.

Liebe Grüße
Christian
Bitte warten ..
Mitglied: Power-Poler
15.04.2013 um 19:47 Uhr
Das ist genau mein Problem, wenn ich Excel (ObenOffice Version) die Daten gebe, werden sie nicht richtig von einander getrennt in spalten abgelegt.
Uhrzeit und Datum Stehen in einer Spalte und der Rest immer so mit 5 Spalten Abstand zueinander dahinter.
Außerdem wüste ich nicht, wie ich dort einen Anweisung gegen kann zur Sortierung der Daten.
Achso, brächte von einer Zeile sowiso nur die Werte:
Datum
Uhrzeit
und den dritten wert von rechts, der Rest kann, wenn möglich gleich raus gefiltert werden.
Bitte warten ..
Mitglied: 76109
15.04.2013 um 20:24 Uhr
Hallo Power-Poler!

Ersetze alle Leerzeichen durch "", dann bleiben nur noch Tabs als Trennzeichen übrig

Gruß Dieter
Bitte warten ..
Mitglied: Power-Poler
15.04.2013 um 20:33 Uhr
Den zustand habe ich jetzt, aber OpenOffice kann damit nichts anfangen.
Auch sortiert bekomme ich sie in OpenOffice nicht.
Bitte warten ..
Mitglied: hmarkus
15.04.2013, aktualisiert um 20:38 Uhr
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
sed -n 's/\t\ \+/;/g' < Dateinname
(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
Bitte warten ..
Mitglied: Power-Poler
15.04.2013 um 20:49 Uhr
habe jetzt eine Batch erstellt mit dem Inhalt:
@echo off &setlocal

sed -n 's/\t\ \+/;/g' < G.txt
pause
bekomme jedoch jetzt eine Fehlermeldung das sed unbekannt wäre. "Der Befehl "sed" ist entweder falsch geschrieben oder
konnte nicht gefunden werden.
Drücken Sie eine beliebige Taste . . ."

Sorry falls ich dich falsch verstanden habe.

Habe jetzt Notepad++ gemacht (hat auch schon ewisch gedauert) OpenOffice öffnet es jetzt normal.
Wie kann ich jetzt in OpenOffice die Werte sortieren lassen?
Bitte warten ..
Mitglied: hmarkus
15.04.2013 um 20:58 Uhr
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 Code
s/\t\ \+/;/g
diese Ersetzung in der Datei machen. Das geht aber auch in jedem anderen Editor.

Markus
Bitte warten ..
Mitglied: bastla
15.04.2013 um 21:33 Uhr
@ hmarkus
Sowas gibt's in Windows nicht.
... aber natürlich für Windows, zB http://gnuwin32.sourceforge.net/packages/sed.htm

Grüße
bastla
Bitte warten ..
Mitglied: hmarkus
15.04.2013 um 21:52 Uhr
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
Bitte warten ..
Mitglied: hmarkus
15.04.2013 um 21:57 Uhr
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.

Markus
Bitte warten ..
Mitglied: hmarkus
16.04.2013, aktualisiert um 09:58 Uhr
Hier noch ein Einzeiler in mehreren Zeilen
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.
Bitte warten ..
Neuester Wissensbeitrag
Internet

Unbemerkt - Telekom Netzumschaltung! - BNG - Broadband Network Gateway

(3)

Erfahrungsbericht von ashnod zum Thema Internet ...

Heiß diskutierte Inhalte
Windows Server
Outlook Verbindungsversuch mit Exchange (15)

Frage von xbast1x zum Thema Windows Server ...

Microsoft Office
Keine Updates für Office 2016 (13)

Frage von Motte990 zum Thema Microsoft Office ...

Grafikkarten & Monitore
Tonprobleme bei Fernseher mit angeschlossenem Laptop über HDMI (11)

Frage von Y3shix zum Thema Grafikkarten & Monitore ...