Perl Slurp在Excel csv文件中

时间:2017-08-30 09:40:55

标签: excel perl csv slurp

我在OSX El Capitan中解析Excel CSV文件,CSV为here

问题是换行标记为'\ x0d'(CR)。

1]我已经能够使用设置为'x0a'(NL)的换行符转换文件

$> 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"; '

但在此之前我尝试了另外两种方式而且他们失败了,我想知道你是否因为失败而有一些贬义。

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 个答案:

答案 0 :(得分:0)

感谢评论我能够理解示例[2]和[3]中的奇怪行为。我在这里写的解决方案可能会在未来遇到同样的问题。

关键是OSX使用NL ='\ n'='x0a'编码换行符,并且在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"; '