我想逐行读取输入文件,但此文件的结尾字符未知。
编辑器vim
也不知道它,它将此字符表示为^A
,并立即以新行中的字符开头。 perl
也是如此。它试图加载所有行,因为它忽略了这些奇怪的行尾字符。
如何将此字符设置为perl的行尾?我不想为它使用任何特殊模块(因为我们的严格系统),我只想定义行尾的字符(可能在hex
代码中)。
另一个选项是将文件转换为另一个文件,具有良好的行尾字符(替换它们)。我可以用一些简单的方法(输入文件中的sed
之类的东西)来制作它吗?但是一切都需要在perl中完成。
有可能吗?
现在,我的阅读部分看起来像:
open (IN, $in_file);
$event=<IN>; # read one line
答案 0 :(得分:4)
你提到的^A
字符是&#34;标题的开头&#34;字符。您可以将特殊的Perl变量$/
设置为此字符。虽然,如果你希望你的代码可以被追随你的人(并使用另一个编辑器)阅读和编辑,我会做这样的事情:
use English;
local $INPUT_RECORD_SEPARATOR = "\cA" # 'start of heading' character
while (<>)
{
chomp; # remove the unwanted 'start of heading' character
print $_ . "\n";
}
来自Perldoc:
$ INPUT_RECORD_SEPARATOR
$ /输入记录分隔符,默认为换行符。这会影响Perl关于&#34; line&#34;是
更多关于PerlMonks的special character escaping。
哦,如果你愿意,你可以输入&#34;标题的开头&#34; VI中的字符,<插入模式下的 ,按 CTRL + V ,然后 CTRL + A < / KBD>。
编辑:根据Drt的建议添加local