我有一个 perl 脚本,它解析一个文本文件并将其每行分解为一个数组。
当每行以 LF 终止时它工作正常,但当它们以 CR 终止时我的脚本无法正确处理。
我该如何修改这一行来解决这个问题
my @allLines = split(/^/, $entireFile);
编辑:
我的文件混合了以下任一行
结束 LF 或结束 CR 它只是折叠所有以 CR 结尾的行
Perl 可以使用内置的处理 CRLF 和 LF 行结束符:crlf
PerlIO http://search.cpan.org/perldoc?PerlIO layer:
open(my $in, '<:crlf', $filename);
会自动将 CRLF 行结尾转换为 LF,并保持 LF 行结尾不变。但仅包含 CR 的文件是很奇怪的。如果您知道该文件仅使用 CR,那么您可以设置$/ http://perldoc.perl.org/perlvar.html#%24INPUT_RECORD_SEPARATOR to "\r"
它会逐行读取(但不会将 CR 更改为 LF)。
如果您必须处理未知行结尾的文件(甚至单个文件中的混合行结尾),您可能需要安装PerlIO::eol http://search.cpan.org/perldoc?PerlIO::eol模块。然后你可以说:
open(my $in, '<:raw:eol(LF)', $filename);
当您读取文件时,它会自动将 CR、CRLF 或 LF 行结尾转换为 LF。
另一个选项是设置$/
to undef
,它将一口气读取整个文件。然后将其分割开/\r\n?|\n/
。但这是假设该文件足够小以适合内存。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)