Hendrik Maryns wrote:
Hi,
Hello,
I'm writing a little script for removing "rustle" from a log file from
chat channels, in order to do linguistic research on them. 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 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. If I remove it, only the first line that
matches gets stripped. I thought the substitution was started all over
again for every line?
It should work without the /g modifier. Using /g means that you want to
match
the pattern one or more times on the same string and I assume that you only
want to match it once?
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.
How can I totally remove that line from my file?
The simple answer is to use grep():
tie my @bestand, 'Tie::File', $best or die "Kon het bestand niet binden: ", $!;
s{\[\d+/\d+/\d+\s\d+:\d+\]\s}{} for @bestand;
@bestand = grep ! /^<.*>/, @bestand;
But that means that you have to traverse the array twice. You can do both
in
a single loop like this:
tie my @bestand, 'Tie::File', $best or die "Kon het bestand niet binden: ", $!;
for ( reverse 0 .. $#bestand ) {
$bestand[ $_ ] =~ s{\[\d+/\d+/\d+\s\d+:\d+\]\s}{};
splice @bestand, $_, 1 if $bestand[ $_ ] !~ /^<.*>/;
}
Note that you have to start at the end of the array for splice() to remove
the
correct element.
Another method is to use the in-place edit variable along with the @ARGV
array
although this method does not really edit the file "in-place".
{ local ( $^I, @ARGV ) = ( '', <*.log> );
while ( <> ) {
s{\[\d+/\d+/\d+\s\d+:\d+\]\s}{};
next unless /^<.*>/;
print;
}
}
John
--
use Perl;
program
fulfillment
--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>