Java Zeile auslesen

GermanGhettos

Lt. Commander
Registriert
Apr. 2011
Beiträge
1.169
Hi,

ich schreibe gerade ein kleines Programm, mit dem ich eine Log.txt Datei zeilenweise auslesen kann.
Das Problem ist, dass ich nur die letzten 3 Stunden betrachten möchte.
Java liest aber immer die ganze Zeile aus und demnach klappt dann natürlich die IF Abfrage nicht,
da z.B. der Wert 8, wenn wir es jetzt 11 Uhr haben immer irgendwo in einer Zeile vorkommen wird.
Es müsste also konkret nur der zweite Abschnitt mit der Uhrzeit betrachtet werden.
"2016-04-28 02:11:18"
Ich habe die Uhrzeit auf "HH" beschränkt.
Er sollte sich also nur auf die Stundenzahl beziehen.

Weiß jemand zufällig, wie das bei Java klappt?
Denn der .Contain Befehl betrachtet scheinbar immer die gesamte Zeile.

Gruß
G.G.
 
Hi,
also ist zwar wahrscheinlich nicht die schönste Lösung, aber du weißt ja eigentlich, wie viele Stellen davor kommen oder?
Also das Datum hat ja immer die selbe Anzahl, dann könntest du immer die entsprechenden beiden Stellen x und y betrachten, in welchen die Uhrzeit steht.
Oder du Schreibst eben ein Zeichen davor, welches dir anzeigt, dass danach die Zeit kommt und betrachtest die stellen danach.
Ich komme eher aus der C-Schiene, von dem her kanns sehr gut sein dass da in Java bereits geschicktere Funktionen vorhanden sind :)

Gruß
Nico
 
Hi,

Ja die Zeilen im Logfile fangen immer so an.
Ich will praktisch, dass Java nur die ersten 2 Stellen der Uhrzeit betrachtet.
Und .contain betrachtet ja die ganze Zeile.
Ich weiß halt nicht, wie ich Java das sage :D

Das mit den Patterns habe ich jetzt nicht so recht verstanden. :p
 
Hi,
also entweder du nimmst wie bereits vorgeschlagen RegEx oder verwendest anstelle dieses Stringgefrickels einfach Entitäten, die du dann bequem abfragen kannst.

greetz
hroessler
 
Sind wirklich alle Zeilen so aufgebaut?
Was passiert mit System.out.println() oder mit Exceptions? Also im meinen Logfiles gibt es auch Zeilen, die nicht mit dem Timestamp beginnen.
Irgendwann habe ich auch mal ein Analyseprogramm für Logfiles geschrieben, ich such gleich mal danach... Edit: mein Analyseprogramm hilft hier nicht weiter. Ein shellscript macht hier die Hauptarbeit mit grep, awk und sed.

RegEx ist natürlich das Stichwort. Wenn du damit aber nicht zurecht kommst, dann kannst du:
- die Stunden stehen immer an der stelben Stelle, also kannst du mit substring(...) die Stunden rausholen
- split() aufrufen und das zweite Element dann nochmals zerlegen mit split(":"). Im ersten Element sind die Stunden
 
Zuletzt bearbeitet:
Alternativ kannst du auch den substring als Date parsen. Damit vereinfachst du dir eventuelle Vergleiche die du später auf die Uhrzeit anwenden willst.
 
log = zeile.substring(11,13); //Array wird befüllt

if (log == "08"){

iZugriffe++;
System.out.println(iZugriffe);


}

Das ganze befindet sich in einer Schleife, sodass jede Zeile eingelesen wird.
Log ist ein String-Array und ich befülle es jetzt eigentlich nur mit der Stundenzeit.
Dannach mache ich ja den Vergleich, ob die Stunde "08" vorkommt und dann soll er den Zähler hochsetzen.
Macht er aber nicht.
Die Bedingung wird also nicht erfüllt, obwohl 08 vorhanden ist.
Weiß jemand woran das liegt?
 
Stimmt, das war ja equals ^^
Wenn ich allerdings Substring(11,2) benutze, bekomme ich eine Fehlermeldung.
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -9
 
C# nutzt substring() in dieser Weise. Also Substring(Startpunkt, Länge) statt Substring(Startpunkt, Endpunkt).
 
Ja, war quark. :D
(11,13) war doch richtig.
Habe es mit einer Textausgabe in der Konsole im Editor geprüft.
Er gibt in der Schleife korrekt den String der Stundenzahl aus!
Jetzt funktioniert es.
Ich kann mit "08" vergleichen und erhalte dann genau 4 als Ergebnis von 7 Zeilen. :)
Besten dank bis hier hin an alle!

Ich melde mich, falls noch eine Frage aufkommt :D
 
Auch wenn deine Lösung funktioniert würde ich mich dennoch einmal mit regulären Ausdrücken (regex) befassen. Es gibt einfach viele praktische Anwendungsfälle und ich bin privat & beruflich immer mal wieder drauf angewiesen. Regex sind unglaublich mächtig, leider aber auch ziemlich kompliziert ... aber die Mühe lohnt sich :)

Ein nettes Tutorial, welches mir weitergeholfen hat: https://danielfett.de/de/tutorials/tutorial-regulare-ausdrucke/
 
Zurück
Oben