2017-01-11 5 views
0

私はExcelからいくつかの値をとり、それをCSVファイルに記録するスクリプトを作成しています。その間に、データに対していくつかの計算を行い、CSVにログします。私は、Excelの値に文字列を追加して、それを配列要素に保存しています。私は実行時間を節約するためにExcelシートをシミュレートするために配列を使用していますし、最後に配列から値を取り出してCSVに記録しています。二重引用符を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

答えて

2

デフォルトでは、フィールド内のスペースは、二重引用符をトリガーします。規則 はこれをCSVに強制するものではなく、その反対のものもありませんので、安全のためにデフォルトの がtrueです。あなたのための問題を解決します0に設定するためText::CSV doc

- あなたは0にこの属性を設定する することにより、このトリガからスペースを除外することができます。

$csv->quote_space (0); 

また、オブジェクトの作成時に同じものを指定することもできます。

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

ありがとうございました、Chankey uはそれを釘付けにしました。 – Mohit

+0

これは、ファイルの書き込み時に既に存在する引用符を削除することはできません。それはそれらを追加しないだけです。 – zdim

+0

ええ、私の入力には引用符は含まれていませんが、引用符で囲まれたスペースがあります。 – Mohit

関連する問題