我在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]点做错了吗?
答案 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"; '