我有一个使用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 次 |
最近记录: |