Hi myself :-) I have a little correction to my code:
The lines > #*# print NEW $_ if $_ !~ /^<.*>/; > print NEW $_ if $_ !~ /^A/; should be > #*# print NEW $_ if $_ =~ /^<.*>/; > print NEW $_ if $_ =~ /^A/; (otherwise, the contrary of the intended is output :-) the output will change too, of course (the A lines will remain instead of being deleted) sorry, joe [nothing new below] Am Sonntag, 6. März 2005 18.56 schrieb John Doe: > Hi Hendrik > > Am Sonntag, 6. März 2005 16.36 schrieb Hendrik Maryns: > > Hi, > > > > [...] I took the > > file and tied it with Tie::File, in order to easily acces it. This > > probably isn't all necessary here, but I want to modify the file itself, > > not writing the output to a new one. > > The solution below does that, but without Tie::File, and scales well even > for large files. > > > The first thing is stripping of a date and time at the beginning of each > > line. My re seems to be correct, as it works. I do not understand why > > I need the /g modifier though. > > I don't know either... > > > If I remove it, only the first line that > > matches gets stripped. I thought the substitution was started all over > > again for every line? > > > > Well, in writing this, I solved half of my problem, but one still > > remains: how can I remove a line? I tried with delete, as you see > > below, but (of course) this does not work, as $lijn is no array element. > > I think you also can't do it with an array (delete does not _remove_ an > array element) > > > How can I totally remove that line from my file? > > > > This is my code: > > > > use strict; > > use warnings; > > use Tie::File; > > > > my @bestanden_lijst = <*.log>; > > for my $best (@bestanden_lijst){ > > tie my @bestand, 'Tie::File', $best or die "Kon het bestand niet > > binden: ", $!; > > for my $lijn (@bestand){ > > $lijn =~ s{\[\d+/\d+/\d+\s\d+:\d+\]\s}{}g; > > #delete $lijn if $lijn !~ /^<.*>/; > > } > > untie @bestand; > > } > > For testing, I used simpler formatted files, other filenames, simpler > regexes and (for better readability) minimal error messages > - see #*# lines which I made simpler/different. > > use strict; > use warnings; > use Tie::File; > my $tmp='tempfile'; > > #*# my @bestanden_lijst = <*.log>; > my @bestanden_lijst = <file*>; > > foreach my $f (@bestanden_lijst) { > open OLD, "<", $f or die $!; > open NEW, ">", $tmp or die $!; > > while (<OLD>) { > > #*# $_=~s{\[\d+/\d+/\d+\s\d+:\d+\]\s}{}; > $_=~s{delete}{}; > > #*# print NEW $_ if $_ !~ /^<.*>/; > print NEW $_ if $_ !~ /^A/; > > } > > close OLD or die $!; > close NEW or die $!; > rename $f, $f.".original" or die $!; > rename $tmp, $f or die $!; > } > > > The input files (file1, file2) > A > B > C > D > A > A delete > B delete > === > Ax > Bx > Cx > Dx > Ax > Ax delete > Bx delete > > > The output: > B > C > D > B > === > Bx > Cx > Dx > Bx > > > I hope that this gives you the help you wanted :-) > > greetings joe -- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] <http://learn.perl.org/> <http://learn.perl.org/first-response>