Hi Lauri,


Lauri Nikkinen wrote:
I would like to parse a .csv file and write certain records into two
separate files. The program below writes the records easily into the
csvtmp.csv but the second file is only created with no records
written. I cannot see the problem here, the second file is produced
easily if the first loop is discarded. Any ideas? Thanks.

-L

======================================
#!/bin/perl

use warnings;
use strict;
use Text::CSV_XS;
use Tie::Handle::CSV;

my $fh = Tie::Handle::CSV->new(csv_parser => Text::CSV_XS->new({binary => 1}),
                              file       => 'rek.csv',
                              header => 1);

#Write into the first file
my $outfile = 'csvtmp.csv';
open (OUTFILE, ">", $outfile) or die $!;

while (my $csv_line = <$fh>) {
       print OUTFILE $csv_line->{'Name'} . ": " .
$csv_line->{'Surname'} . "\n";
   }


From what I can tell, in your first loop, you are reading in from the input file and exhaust the input file (reached End-of-File [EOF]) to leave this while loop. So, when you enter the second while loop (which comes after and I have cut), the input file has been exhausted and there is nothing to do.

if you want to read again with the second while loop, you can either:

1)  close the file handle ($fh) and re-open it
2) Seek to the beginning of the file between the two while loops (http://perldoc.perl.org/functions/seek.html) 3) Open it once, read all the lines into a buffer and then use that buffer (an array, etc.) to output it to your two output files.

And I'm sure there are many other options available...


Ray



--
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
http://learn.perl.org/


Reply via email to