Thread Zeile in Datei bearbeiten
(12 answers)
Opened by hudo at 2007-08-29 14:02
ein kleines Beispiel (bitte mit Testdaten ausprobieren) ...
und vorausgesetzt, dass die Zeilen wirklich eine fixe Länge haben! # cat test.txt ----0---m---28.07.2007---23:13:18---rest---id=123456 ----7---a---28.07.2007---23:13:46---rest---id=345677 ----0---a---28.07.2007---23:13:57---rest---id=876543 ----8---a---28.07.2007---23:14:57---rest---id=876544 ----0---a---28.07.2007---23:15:57---rest---id=876545 ----9---a---28.07.2007---23:16:57---rest---id=876546 Code (perl): (dl
)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 use strict; use warnings; my $len = 53; # Zeilenlänge my %nmb = # Nummern, die geändert werden sollen map { $_ => undef } (7, 8, 9); open my $fh, '+<', 'test.txt' or die $!; while ( my $line = <$fh> ) { my $nmb = substr($line, 0, 5); # die ersten 5 Zeichen $nmb =~ s/^-+//g; # Bindestrich entfernen if (exists $nmb{$nmb}) { # wenn die Zeile geändert werden soll my $pos = tell($fh); # Position des Zeilenendes merken seek($fh, $pos - $len, 0); # Zum Anfang der Zeile springen $nmb = sprintf('%5s', 10); # Kontainer $nmb =~ tr/ /-/; # Leerzeichen ersetzen print $fh $nmb; # erste Spalte ersetzen # nun befinden wir uns an Position 5 # Datum + Uhrzeit my ($sec,$min,$hour,$mday,$mon,$year) = localtime; $year += 1900; $mon += 1; # zu Position 9 springen, da wo das Datum anfängt und Datum + Uhrzeit schreiben seek($fh, 4, 1); print $fh sprintf('---%02d.%02d.%04d', $mday, $mon, $year); print $fh sprintf('---%02d:%02d:%02d', $hour, $min, $sec); # zur Position springen, wo die ID anfängt seek($fh, 7, 1); # die ID Filtern, +1, Kontainer erzeugen, Leerzeichen ersetzen my $id = substr($line, 40, 12); $id =~ s/^-*id=//; $id = sprintf('%12s', "id=" . ++$id); $id =~ tr/ /-/; print $fh $id; # zum gemerkten Zeilende springen, dass ist hinter dem Newline seek($fh, $pos, 0); } } close $fh; # cat test.txt ----0---m---28.07.2007---23:13:18---rest---id=123456 ---10---a---29.08.2007---13:43:40---rest---id=345678 ----0---a---28.07.2007---23:13:57---rest---id=876543 ---10---a---29.08.2007---13:43:40---rest---id=876545 ----0---a---28.07.2007---23:15:57---rest---id=876545 ---10---a---29.08.2007---13:43:40---rest---id=876547 What is a good module? That's hard to say.
What is good code? That's also hard to say. One man's Thing of Beauty is another's man's Evil Hack. |