Re: Matching a Scalar Variable
- From: mlists@xxxxxxxxxxxxxxx (JupiterHost.Net)
- Date: Tue, 29 Nov 2005 12:45:31 -0600
Charles K. Clarkson wrote:
JupiterHost.Net <mailto:mlists@xxxxxxxxxxxxxxx> wrote:
: This will open both files and check each line of file2 against : each line of file1 (and it alerts you to any problems, is easier : to read, best pratice safe (hopefully ;p), ect etc):
Sorry, but it won't. It will open both files and check the first line of file1 against all the lines of file2. All the rest of the lines in file1 are not tested. The inner loop only runs once. The pointer into file2 is never set back to the file start.
Good point :)
Perhaps I should have worded it "this does the same thgin you were doing in your example" :)
If file1 has: 1 2 3 4 and file2 has: a b c d then the output of:
#!/usr/bin/perl
use strict; use warnings;
open my $file1_fh, '<', 'file1' or die "file1 open failed: $!"; open my $file2_fh, '<', 'file2' or die "file2 open failed: $!";
while(<$file1_fh>) {
my $line = $_;
chomp $line;
print "File 1 $line\n";
while(<$file2_fh>) {
my $match_against = $_;
chomp $match_against;
print "\tFile 2 $match_against\n";
# print "Got the string\n" if $line =~ m{$match_against}xms;
}
}close $file1_fh; close $file2_fh;
is:
File 1 1
File 2 a
File 2 b
File 2 c
File 2 d
File 1 2
File 1 3
File 1 4
But if you do it liek so:
#!/usr/bin/perl
use strict; use warnings;
open my $file1_fh, '<', 'file1' or die "file1 open failed: $!"; open my $file2_fh, '<', 'file2' or die "file2 open failed: $!";
my @match_list = <$file2_fh>; close $file2_fh;
while(<$file1_fh>) {
my $line = $_;
chomp $line;
print "File 1 $line\n";
for my $match_against (@match_list) {
chomp $match_against;
print "\tFile 2 $match_against\n";
# print "Got the string\n" if $line =~ m{$match_against}xms;
}
}close $file1_fh;
then the output is:
File 1 1
File 2 a
File 2 b
File 2 c
File 2 d
File 1 2
File 2 a
File 2 b
File 2 c
File 2 d
File 1 3
File 2 a
File 2 b
File 2 c
File 2 d
File 1 4
File 2 a
File 2 b
File 2 c
File 2 dThanks for catching my misstatement :)
So this will do what I originally said (IE instead of copying the original example I commented on):
#!/usr/bin/perl
use strict; use warnings;
open my $file1_fh, '<', 'file1' or die "file1 open failed: $!";
open my $file2_fh, '<', 'file2' or die "file2 open failed: $!"; my @match_list = <$file2_fh>; close $file2_fh;
while(<$file1_fh>) {
my $line = $_;
chomp $line; for my $match_against (@match_list) {
chomp $match_against;
print "Got the string\n" if $line =~ m{$match_against}xms;
}
}close $file1_fh;
.
- Follow-Ups:
- RE: Matching a Scalar Variable
- From: Charles K. Clarkson
- RE: Matching a Scalar Variable
- References:
- RE: Matching a Scalar Variable
- From: Charles K. Clarkson
- RE: Matching a Scalar Variable
- Prev by Date: Re: formatting text
- Next by Date: Re: the time a program runs
- Previous by thread: RE: Matching a Scalar Variable
- Next by thread: RE: Matching a Scalar Variable
- Index(es):
Relevant Pages
|
|