以CSV格式获取双引号

时间:2017-01-11 07:20:46

标签: perl perl-module

我正在编写一个脚本,它从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

1 个答案:

答案 0 :(得分:2)

  

默认情况下,字段中的空格会触发引用。没有规则   存在这是以CSV强制,也不是相反,默认   是安全的。您可以从此触发器中排除空间   将此属性设置为0. - Text::CSV doc

因此将其设置为0将为您解决问题。

$csv->quote_space (0);

您也可以在创建对象时指定相同内容。

$csv = Text::CSV->new ({
           quote_space    => 0,
       });