Thread Datenzeilen einlesen
(6 answers)
Opened by qwe123qwe at 2013-10-08 23:10
Dein Ansatz ist schon in Ordnung.
Was die Ausgabe und dessen Puffern betrifft. Wenn man nicht erzwingt das Perl alle Schreibvorgänge sofort durchführt. (z.B. mit $|++ ) dann puffert Perl bis zu 16Kb. ( Beim Wert bin ich unsicher, das hängt davon ab wie Perl kompiliert wurde ) Es wird aber immer geschrieben, wenn eine Zeile vollständig ist. ( Eine Zeile endet mit "\n" ) Ich kann dir aus dem Kopf aber nicht sagen wie sich Perl verhält wenn man den Binärmodus erzwingt. ( binmode( $fh ) ) ![]() Wie du die extrahierten Daten am besten speicherst, hängt davon ab was du Nachher damit machen willst. Folgen kompexete Auswertungen kann es sinnvoll sein die Daten in eine Relationale oder eine File Datenbank zu schreiben ( ![]() ![]() Wenn die Datenmenge nicht zu groß ist kannst du sie auch direkt im Speicher halten und in Perl selber verwalten/verarbeiten. Das Verhältnis ist 1 zu 2 bis 1 zu 10. 1Mb auf der Festplatte kann 2 bis 10Mb im Speicher bedeuten. Was das Zwischenspeichern betrifft. Soll das Script später längerfristig laufen, so ist es günstig darauf zu achten das es nicht zu viel schreibt oder ließt. Nicht nur das jede Interaktion mit dem System verhältnismäßig langsam ist. Man macht sich auch unnötige Probleme wenn mal mehrere Instanzen des Scripts laufen sollen. Ist es aber nur eine einmalige Sache, so lohnt es sich jeden Schritt in Dateien abzulegen, damit man die Abläufe prüfen und nötigenfalls korrigieren kann, ohne das man alle Schritte erneut durchführen muss. 2013-10-08T21:10:48 qwe123qwe Reguläre Ausdrücke sind er Trick. ;-) Aber ich weiß was du meinst. Es wäre dir recht wenn es ein Befehl/Modul gäbe das Zeit- oder Datumsangaben erkennt. und es gibt solche Module (z.B. ![]() Da du ja nicht nur an der Zeit interessiert bist, sondern an allen Daten in der Zeile. Zudem ist die Erkennung zu unspezifisch. Die Module interpretieren alles was irgendwie nach Datum/Zeit aussieht. Da kannst du einige falsche Treffer bekommen. Einen guten Regulären Ausdruck halte ich für besser. Zum Beispiel so einen: Code (perl): (dl
)
1 2 my @values = $line =~/(\d+):(\d+):(\d+)\s+(\d+),(\d+)\s+([\d.]+)\s+([\d.]+)/; next unless @values; Um besser mit er Zeitangabe umgehen zu können kann es sich lohnen diese als Sekunden zu behandeln: Oder man kann ein Modul heran ziehen und es als TimeStamp behandeln: |