Beefy Boxes and Bandwidth Generously Provided by pair Networks
Syntactic Confectionery Delight
 
PerlMonks  

Re: Loop through 2 files in parallel

by Roy Johnson (Monsignor)
on Nov 10, 2010 at 20:16 UTC ( [id://870679]=note: print w/replies, xml ) Need Help??


in reply to Loop through 2 files in parallel

You definitely don't want to nest your file-reading loops. Instead, try something like this (untested):
while (my $w1 = <FILE> and my $w2 = <FILE2>) { if ($w1 lt $w2) { print "\n"; $w1 = <FILE>; } elsif ($w1 gt $wt) { print "\n"; $w2 = <FILE2>; } else { print $w1; } } # Leftover lines in either file? print "\n" while <FILE>; print "\n" while <FILE2>;

Caution: Contents may have been coded under pressure.

Replies are listed 'Best First'.
Re^2: Loop through 2 files in parallel
by rwitmer (Initiate) on Nov 10, 2010 at 21:07 UTC
    By george, I think this will work. You are truly a monktastic monk! Thanks!
      at least one error in previous code ... while condition is wrong.
      use strict; use warnings; my @FILES; open $FILES[0], '<', 'file1' or die; open $FILES[1], '<', 'file2' or die; my @w = map scalar <$_>, @FILES; my $empty = "blank line\n"; my %map = ( -1 => [ 0 ], 1 => [ 1 ], 0 => [ 0, 1 ], ); while (defined $w[0] && defined $w[1]) { my $cmp = $w[0] cmp $w[1]; print $cmp ? $empty : $w[0]; @w[ @{$map{$cmp}} ] = map scalar <$_>, @FILES[ @{$map{$cmp}} ]; } # Leftover lines in either file? print map $empty, map <$_>, @FILES;

Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Node Status?
node history
Node Type: note [id://870679]
help
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others avoiding work at the Monastery: (6)
As of 2024-03-28 12:14 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found