2017-08-30 10 views
-1

Excelのcsvファイル内のPerl SLURPは、CSVはhere私はOSXエルキャピタンでExcel CSVファイルを解析しています

問題は改行が '\ x0d'(CR)としてマークされているです。

1]私は

$> perl -e 'open(fh, "<coord2.csv") or die("can t open file"); 
    binmode(fh); $/=\10; 
    while ($t=<fh>) { $t =~ s/\x0d/\x0a/g; print "$t"; } print "\n"; ' 

で「X0A」(NL)として設定改行でファイルを変換することができましたが、その前に、私は2つの他の方法を試してみましたが、彼らは失敗した、私はかどうかを知りたいです彼らが失敗する理由のためにいくつかのexmplanationを持っています。

2]私は一度にすべてのファイルを読まためにしばらくの間しようとした:

$> cat coord2.csv | perl -e 'undef $/; $t=<>; print "$t \n"; ' 

が、出力では、私はすべてのファイルが表示されない、私だけを参照してください。

Prelevacampioni ZARA;45.0640, 11.1943;F ;F 9.954467;F00;F599242;F 

3]私は、$/変数を設定することも試みた:

$> cat coord2.csv | perl -e '$/="\x0d"; @L=<>; 
         for (@L) { print $_; } print "\n"; ' 

が、再び、私は同様に、同じ出力を参照しますポイント[2]。

私は困惑しています。あなたが私が何を間違っているのかを[2]と[3]で説明することはできますか?

+1

あなたの第3の例は、構文エラーを有しています。引用符は壊れています。 '\ r'を行末文字として使うのはMacOSでは普通です。同じmacでこれを実行すると、ちょうど 'chomp'を使うことができ、Perlは正しいことをします。しかし、一度にファイル全体を読んでみたいので、とにかく行末を気にするのはなぜですか? – simbabque

+0

[1]構文訂正ありがとうございますが、結果は後で同じです。 [2]行末について 'ls -1 |を実行すると、私はあなたに同意しません。 hexdump -C'で行末がCRではなくNLとしてエンコードされていることがわかります。 [3] 'print $ _'の前にchompを入れて、今はすべての行を印刷します!今、私は何が起こったのか理解しました。ありがとうございました。 –

答えて

0

ありがとうございましたコメントをいただきありがとうございました[2] [3]の例では奇妙な動作を理解することができました。私はここに、同じ問題を抱えているかもしれない人々のための解決策を書いています。

NL = '\ n' = 'x0a'でOSXが改行をエンコードし、CVSファイルの行末でCR = '\ r' = 'x0d'でエンコードされています。 Perlは行を正しく読み込んでいましたが、CRはPerlの書込みを常に同じ行に保持していたため、出力は乱されました。

したがって、例のために修正コード[2]及び[3]である:

[2] $> cat coord2.csv | perl -e 'undef $/; $t=<>; 
      $t =~ s/\x0d/\x0a/g; print "$t \n"; ' 


[3] $> cat coord2.csv | perl -e '$/="\x0d"; @L=<>; 
      for (@L) { s/\x0d/\x0a/g; print $_; } print "\n"; ' 
関連する問題