Thread pattern matching: Loeschen eines  Textblocks aus einer Dat (14 answers)
Opened by mkuehnl at 2004-08-17 11:55

pq
 2004-08-17 15:53
#49332 #49332
User since
2003-08-04
12209 Artikel
Admin1
[Homepage]
user image
so, weil ich grad lust hatte:
Code: (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
use Fcntl qw(SEEK_SET);
open my $fh, "+<", "fileblock" or die $!;
my @store = (0,0,0);
my $tell = 0;
while(<$fh>) {
 if (m/^ttttt$/) {
   # zur gemerkten position seek()en
   seek $fh, $store[0], SEEK_SET;
   # zu löschenden block einlesen
   for (0..8) {
     <$fh>;
   }
   # rest einlesen
   my @rest = <$fh>;
   # wieder zurückkehren
   seek $fh, $store[0], SEEK_SET;
   # alles ab hier abschneiden
   truncate $fh, $store[0];
   # und den rest schreiben
   print $fh @rest;
 }
 else {
   # queue, die sich die positionen der letzten drei zeilen merkt
   shift @store;
   push @store, $tell;
 }
 $tell = tell $fh;
}
close $fh;

edit: seek mit Fcntl-konstante\n\n

<!--EDIT|pq|1092744513-->
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem

View full thread pattern matching: Loeschen eines  Textblocks aus einer Dat