[英]CR vs LF perl parsing
我有一个perl脚本,它解析一个文本文件,并将每行分解为一个数组。 当每一行都被LF终止时它工作正常,但当它们通过CR终止时,我的脚本处理不正确。 如何修改此行以解决此问题
my @allLines = split(/^/, $entireFile);
编辑:我的文件有一个混合的行,结尾是LF或结束CR它只是在CR结束时折叠所有行
Perl可以使用内置的:crlf
crlf PerlIO层处理CRLF和LF行结尾:
open(my $in, '<:crlf', $filename);
将自动将CRLF行结尾转换为LF,并保持LF行结尾不变。 但CR-only文件是奇怪的。 如果您知道该文件仅使用CR,那么您可以将$ /设置为 "\\r"
,它将逐行读取(但不会将CR更改为LF)。
如果必须处理未知行结尾的文件(甚至是单个文件中的混合行结尾),您可能需要安装PerlIO :: eol模块。 然后你可以说:
open(my $in, '<:raw:eol(LF)', $filename);
当您读取文件时,它会自动将CR,CRLF或LF行结尾转换为LF。
另一种选择是将$/
设置$/
undef
,这将在一个slurp中读取整个文件。 然后将其拆分为/\\r\\n?|\\n/
。 但是假设文件足够小以适应内存。
在进行split
,您可以只处理不同的行结尾,例如:
my @allLines = split(/\r\n|\r|\n/, $entireFile);
如果使用<>
读取它会自动将输入拆分为行,但是您需要将$/
更改为\\r
。
$/
是“输入记录分隔符”。 有关详细信息,请参阅perldoc perlvar
。
没有任何方法可以改变正则表达式认为的行尾 - 它始终是换行符。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.