> -----Original Message-----
> From: Chris Stinemetz [mailto:chrisstinem...@gmail.com]
> Sent: Monday, February 20, 2012 3:51 PM
> To: beginners@perl.org
> Subject: Re: search and replace with an array
> 
> Looks like I was able to figure it out with the below:
> 
> But how do I remove all the blank lines?
> 
> Output:
> 
> cdmno=1
> rdnt_cdmno=1
> 
...
> 
> cdmno=2
> rcsm=801
> 
> rcsm=801
> 
...
> 
> rcsm=802
> 
> #!/usr/bin/perl
> use warnings;
> use strict;
> 
> my $file = "nonKeys.txt";
> my $newFile = "cleanKeys.txt";
> my @keyFields = qw(rcsm cdmno);
> 
> #open my $FH, '<', $file or die "ERROR opening $file: !"; open my
> $FHOUT, '>', $newFile or die "ERROR opening $newFile: !";
> 
> while ( <DATA> ) {
>   chomp;
>   for my $i ( 0 .. $#keyFields ) {
>     $_ =~ s/$keyFields[$i]\d.*//;
>   }
>   print "$_\n";
> }
> __DATA__
> cdmno=1
> rdnt_cdmno=1
> cdmno2=1
> cdmno3=1
> cdmno4=1
> cdmno5=1
> cdmno6=1
> cdmno7=1
> cdmno8=1
> cdmno=2
> rcsm=801
> rcsm2=801
> rcsm3=801
> rcsm4=801
> rcsm5=801
> rcsm6=801
> rcsm7=801
> rcsm8=801
> rcsm=801
> rcsm2=801
> rcsm3=801
> rcsm4=801
> rcsm5=801
> rcsm6=801
> rcsm7=801
> rcsm8=801
> rcsm=802
> 

Hi Chris,

   for my $i ( 0 .. $#keyFields ) {
     $_ =~ s/$keyFields[$i]\d.*//;
   }
Would usually be written as:
   for my $keyField ( @keyFields ) {
     $_ =~ s/$keyField\d.*//;
   }

Based on the fact that you are creating blank lines with your substitute
command, and now you wish to eliminate them - the substitution appears to
not be needed.

Therefore, just go to the next line of input if you have a match. For
instance:

DATA_LOOP:
while ( <DATA> ) {
   for my $keyField ( @keyFields ) {
     next DATA_LOOP if /$keyField\d.*/;
   }
   print;
}

Notice I removed the chomp as it is not necessary in this case.

HTH, Ken




-- 
To unsubscribe, e-mail: beginners-unsubscr...@perl.org
For additional commands, e-mail: beginners-h...@perl.org
http://learn.perl.org/


Reply via email to