【问题标题】:Getting Double Quotes in a value in CSV在 CSV 中的值中获取双引号
【发布时间】:2017-01-11 07:20:45
【问题描述】:

我正在编写一个脚本,该脚本从 excel 中获取一些值并将其记录到 CSV 文件中。在这期间,我们对数据执行一些计算,然后记录到 CSV。我将字符串附加到 excel 中的值,然后将其保存到数组元素中。我使用数组来模拟 Excel 工作表以节省执行时间,最后从数组中选取值并将其记录到 CSV。

但我面临的问题是,我为在其中附加了一个带有 excel 值的字符串的列得到的这个值是在周围加上双引号。它们在 excel 的情况下不可见,但是当我在 notepad++ 中查看 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,,,"Last Invoice : 1111",,,DP

【问题讨论】:

    标签: perl perl-module


    【解决方案1】:

    默认情况下,字段中的空格会触发引号。作为没有规则 存在强制在 CSV 中,也没有相反的,默认 对于安全来说是正确的。您可以通过以下方式从此触发器中排除空间 将此属性设置为 0。-Text::CSV doc

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

    $csv->quote_space (0);
    

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

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

    【讨论】:

    • 谢谢,Chankey 你搞定了。
    • 这不能删除写入文件时已经存在的引号。它只会不添加它们。
    • 是的,但我的输入没有引号,而是导致引号的空格。
    • @Mohit Ah ...这不是问题所显示的。它有 "Last Invoice :"(带引号)。该描述还表明引号(最初)来自 Excel 数据。好吧,这确实不会添加引号。
    • @zdim,不,“最后一张发票:”的东西是 CSV 格式,这是我指的输出文件。不过感谢您的快速回复。
    猜你喜欢
    • 2017-07-28
    • 1970-01-01
    • 2020-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-28
    • 1970-01-01
    相关资源
    最近更新 更多