我有一个使用CR/LF分隔记录的文件,但个别记录有时包含LF.
while (<$in>)
{
#extract record data
}
Run Code Online (Sandbox Code Playgroud)
我试图阅读上面的代码,这(正如我所料)分割只包含LF的记录.但是我希望重新分配$/可以解决这个问题,但它确实会导致我在一次迭代中读取完整的文件.
$/ = "\r\n";
while (<$in>)
{
#extract record data
}
Run Code Online (Sandbox Code Playgroud)
这里的任何人都可以提出有效的解决方案
我在Windows上使用Activestate Perl.
Mat*_*ias 11
在Windows上,perl仅将传入的CRLF行结尾转换为LF,通过将数据作为文本读取(perlport),无法区分CRLF和LF .因此,您必须使用文件句柄上的binmode以二进制模式读取数据:
binmode($in);
Run Code Online (Sandbox Code Playgroud)
之后,您可以将输入记录分隔符设置为"\ 015\012"并像往常一样读入记录:
$/ = "\015\012";
while (<$in>) {
...
}
Run Code Online (Sandbox Code Playgroud)
招呼,马蒂亚斯
PS:我现在没有机会在本地进行测试,所以如果它不起作用我会感到遗憾.
尝试设置$/为"\n"。从perlport 中的换行符:
Perl 用于
\n表示“逻辑”换行符,其中逻辑可能取决于所使用的平台。在 MacPerl 中,\n始终表示\015. 在 DOSish perls 中,\n通常表示\012,但是当以“文本”模式访问文件时,perl 使用将:crlf其转换为(或来自)的层\015\012,具体取决于您是阅读还是写作。
| 归档时间: |
|
| 查看次数: |
4690 次 |
| 最近记录: |