Leser: 5
|< 1 2 >| | 13 Einträge, 2 Seiten |
1
2
3
----0---m---28.07.2007---23:13:18---rest---id=123456
----9---a---28.07.2007---23:13:46---rest---id=345677
----0---a---28.07.2007---23:13:57---rest---id=876543
---10---a---29.07.2007---13:32:46---rest---id=345677
1
2
3
4
5
6
7
8
9
### timestamp##################################
( $sec ,$min ,$hour ,$mday ,$mon ,$year ) = localtime;
$jahr = 1900+$year;
if ( $mon <= 9 ) {$mon = "0"."$mon";}
if ( $mday <= 9 ) {$mday = "0"."$mday";}
if ( $sec <= 9 ) {$sec = "0"."$sec";}
if ( $min <= 9 ) {$min = "0"."$min";}
if ( $hour <= 9 ) {$hour = "0"."$hour";}
### ende timestamp##################################
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
#!/usr/bin/perl use warnings; use strict; #use kopfschmerzen; my $string = '----9---a---28.07.2007---23:13:46---rest---id=345677'; my $regexp = '----(\d+)---\w+---(\d+.\d+.\d+)---(\d+:\d+:\d+)---rest---id=(\d+)'; my ($count, $date, $time, $id); $string =~ /$regexp/i; $count = $1; $date = $2; $time = $3; $id = $4; if( $id == 345677 ) { $count += 1; $date = localtime(); $time = localtime(); print "----$count---a---$date---$time---rest---id=$id"; }
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;
RPerl+2007-08-29 13:19:20--Code (perl): (dl )1 2 3my $string = '----9---a---28.07.2007---23:13:46---rest---id=345677'; my $regexp = '----(\d+)---\w+---(\d+.\d+.\d+)---(\d+:\d+:\d+)---rest---id=(\d+)'; my ($count, $date, $time, $id);
RPerl+2007-08-29 14:17:49--Hab in seinen dummies davon nichts gesehen.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
if ( -s $file ) {
print "\n Hole aus : $file\n";
open(DATEI,"<$file") or die $!;
@adressen = <DATEI>;
close DATEI;
}
foreach $elem (@adressen) {
foreach $elem2 (@sel_ids) { ## array with id's to process
if ( $elem =~ $elem2 ) {
## hier Erhoehung des counters in $elem und neue timestamp
}
}
}
QuoteIch wollte eigentlich auch wissen, obs besser ist die Datei einzulesen mit open usw
oder mit Tie::File direkt in der Datei zu bearbeiten.
QuoteKann man eigentlich $elem direkt editieren und sind die Aenderungen dann in @adressen
QuoteIch denke es waere besser die äussere Schleife mit Zaehler bis $#adressen laufen zu lassen und dann das adressen[zaehler] zu editieren.
|< 1 2 >| | 13 Einträge, 2 Seiten |