I have the first part of the task completed i.e. sorting the files. Here is my code
///My code
use FileCache maxOpen => 1000;
////////////
# config:
my $field = 0;
my $sep = ",";
////MY code
cacheout $mode, $path;
$fh = cacheout $mode, $path;
/////////
$, = $sep;
$\ = $/;
my %file; # { num, name, $fh }
my $fnum = 1;
while (<>)
{
chomp;
my @c = split /$sep/o;
my( $key, $num ) = defined $c[$field]
? ( $c[$field], $fnum++ )
: ( '(column not present)', 0 );
unless ( $file{$key})
{
$nameF = $c[$field];
$nameF =~ s/"//g;
$file{$key}{num} = $num;
$file{$key}{name} = "out/".$nameF.$ARGV[0];
if(($file{$key}{num}) >1){
-f $file{$key}{name} and die
"Sorry, '$file{$key}{name}' exists; won't clobber.";
open $file{$key}{fh}, ">", $file{$key}{name} or die
"Error opening '$file{$key}{name}' for write - $!";
}}
print {$file{$key}{fh}} @c;
}
The problem is the filecache. I am not familiar with perl so I am having problems with this part of code.
I am getting error
$ perl split.pl Input.csv .cvs
Error opening '4444.cvs' for write - Too many open files at split.pl 39, <> line 817961.
I have marked the my addition to jdporter's code
I don't know $path and $mode are.
|