3

我想逐行读取输入文件,但该文件有未知结尾字符

编辑器vim也不知道,它将这个字符表示为 ^A并立即以换行符开始。对于perl. 它试图一次加载所有行,因为它忽略了这些奇怪的行尾字符。

如何将此字符设置为 perl 的行尾?我不想为它使用任何特殊的模块(因为我们严格的系统),我只想定义行hex尾的字符(可能在代码中)。

另一种选择是将文件转换为另一个具有良好行尾字符的文件(替换它们)。我可以用一些简单的方法(比如sed输入文件)吗?但是一切都需要在 perl 中完成。

有可能的?

现在,我的阅读部分看起来像:

open (IN, $in_file);
$event=<IN>;   # read one line
4

1 回答 1

4

您提到的^A字符是“标题开始”字符。您可以将特殊的 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 关于“线”的概念。

更多关于PerlMonks 上的特殊字符转义

哦,如果您愿意,您可以在 VI 中输入“标题开头”字符,在插入模式下,按CTRL+ V,然后按CTRL+ A

编辑:local根据 Drt 的建议添加

于 2013-02-08T12:05:47.410 回答