我正在编写一个脚本,它从excel中获取一些值并将其记录到CSV文件中。在此期间,我们对数据执行一些计算,然后记录到CSV。我将一个字符串附加到excel的值,然后将其保存到数组元素。我使用数组来模拟Excel工作表以节省执行时间,最后从数组中选择值并将其记录到CSV。
但是我面临的问题是我为一个列添加的值,其中我添加了一个带有excel值的字符串,它给出了双引号。在excel的情况下它们是不可见的,但是当我在记事本++中查看CSV时,我得到了那些。
我试过看但没有任何理由这样做。任何人都可以提供帮助。
请在下面找到代码参考:
$Array_Final[$R_FIN][11] = "Last Invoice : ".$Array_Input_DP_Plan3[$W_R][$C_LI];
my $csv = Text::CSV->new ( { binary => 1, eol => "\n" } ) # should set binary attribute.
or die "Cannot use CSV: ".Text::CSV->error_diag ();
open my $fh, ">:encoding(utf8)", $VPath."\\Temp\\".$VCsvFileName;
my @log;
for my $row(1..$#Array_Final){
#COMMENT:EMPTY THE LOG ARRAY
$#log = -1;
for my $col(1..42){
if(defined $Array_Final[$row][$col] && $Array_Final[$row][$col] ne ""){
push @log, $Array_Final[$row][$col];
}
else{
push @log, undef;
}
}
#print (@log);
$csv->print ($fh, \@log);
}
close $fh or die "new.csv: $!";
我得到的CSV行:
20161212-001,20170111,DEL,12,3,A,ABC ,,,"最后发票:1111" ,,, DP
答案 0 :(得分:2)
默认情况下,字段中的空格会触发引用。没有规则 存在这是以CSV强制,也不是相反,默认 是安全的。您可以从此触发器中排除空间 将此属性设置为0. - Text::CSV doc
因此将其设置为0将为您解决问题。
$csv->quote_space (0);
您也可以在创建对象时指定相同内容。
$csv = Text::CSV->new ({
quote_space => 0,
});