my $csv = Parse::CSV->new(
file => $xFile[$k],
sep_char => ',',
names => 1,
empty_is_undef => 1,
auto_diag => 1,
binary => 0,
header =>'auto' );
####
if(length($str_check)==0){return ('0');}else{return($str_check);}
####
if($str_check = undef){do stuff};{return ('0');}else{return($str_check);}
####
use 5.12.0;
use warnings;
use strict;
use Carp;
use sigtrap 'handler' => \&myhand, 'INT';
use Cwd;
use Benchmark;
use File::Basename;
use Acme::Comment type => 'C++', own_line => 1;
use English '-no_match_vars';
#####################################################################
use Parse::CSV;
use Text::CSV_XS;
#####################################################################
system('clear');
my $dbg_1=0;
my $dbg_2=1;
my $start=time;
my $t0 = new Benchmark;
print "\n Current Date and Time -> " . localtime() . "\n";
my $Base='/Users/Documents/matlab/projects/kaggle/criteo';
my $s_DIR=$Base.'/input/tmp';
my $p_DIR=$Base.'/output/data/pass';
my $f_DIR=$Base.'/output/data/fail';
my @xFile = grep {-f $_}glob( "$s_DIR/x*");
#
if($dbg_1){
foreach my $f (@xFile) {
my $filesize = -s $f;
printf "%-25s size is %15d \n", ($f, $filesize);
};
};
#
#initialize vars
my $k=0;
my $noLines=9e3;
my $count=0;
my $result=0;
my $temp=0;
my $value=0;
my $name="";
my $n=@xFile;
for ($k = 0; $k <= $n; $k++){
my $indexF=0;
my $indexP=0;
(my $suffix,my $path,$name)=fileparse($xFile[$k], "\.[^.]*" );
print 'processing '.$name."\n";
my $f_Pass=$p_DIR."/pass_table_".$name.'.txt';
my $f_Fail=$f_DIR."/fail_table_".$name.'.txt';
open(DATA,">".$f_Pass) || die "Can't open output file";
open(DATA2,">".$f_Fail) || die "Can't open output file";
if($dbg_1){
print "xF=> ".$k."\n";
print "xFile[xF]=> ".$xFile[$k]."\n";
print "name=> ".$name." \n";
print "path=> ".$path." \n";
print "suffix=> ".$suffix." \n";
print "f_Pass=> ".$f_Pass."\n";
print "f_Fail=> ".$f_Fail."\n";
};
my $csv = Parse::CSV->new(
file => $xFile[$k],
sep_char => ',',
names => 1,
empty_is_undef => 1,
blank_is_undef => 1,
auto_diag => 1,
binary => 1,
header =>'auto',
callbacks => { after_parse => sub { $_ ||= 0 for @{$_[1] }
},}
);
my @hash = $csv->names; #returns hash
my @vals = values @hash; #hash to array
# for ($count = 0; $count <= $noLines; $count++) {
# $value = $csv->fetch;
while ( $value = $csv->fetch ){
if($value->{$vals[1]}==1){
for $k (2 .. $#vals) {
$temp=$value->{$vals[$k]};
$result=check_blank($temp);
process_table($k,$result);
};
printf DATA "\n";
$indexP=$indexP+1;
}else{
for $k (2 .. $#vals) {
$temp=$value->{$vals[$k]};
$result=check_blank($temp);
process_table2($k,$result);
};
printf DATA2 "\n";
$indexF=$indexF+1;
};
};
print " totalP $indexP totalF ".($indexF-0)." total ".($indexP+$indexF)." \n";
printf "%% totalP/(totalF+totalP)= %.2f %% \n",($indexP/($indexP+$indexF)*100);
close(DATA) || die "Couldn't close output file properly";
close(DATA2) || die "Couldn't close output file properly";
};
######################## sub ############################################
sub check_blank{
my $str_check= $_[0];
if((length($str_check)==0)) {
return ('0');
}else{
return($str_check);
};
exit 1;
};
sub process_table{
my $kk= $_[0];
my $result= $_[1];
if($kk==1){
#do something here
}else{
printf DATA $result." ";
};
return;
exit 1;
};
sub process_table2{
my $kk= $_[0];
my $result= $_[1];
if($kk==1){
#do something here
}else{
printf DATA2 $result." ";
};
return;
exit 1;
};
########################system ########################################
my $t1 = new Benchmark;
my $td = timediff($t1, $t0);
print "Code took:",timestr($td),"\n";
printf "++Finished program in ->\t %5.2f seconds\n",time-$start;
print "\n";
##########################################################################
sub myhand {
print "\n caught $SIG{INT}", @_;
close(DATA) || die "Couldn't close output file properly";
print "\nHey Stop that SIG hurts!";
print "\nCleaning up now...";
exit 1;
};
sub pad (){
my ( $num, $len ) = @_;
return '0' x ( $len - length $num ) . $num;
exit 1;
};
###########################################################################
exit 1;