【发布时间】:2014-06-17 20:32:35
【问题描述】:
我正在编写一个 Perl 程序来添加 \r \n 作为 200 字节记录末尾的第 201 和第 202 字节。我正在尝试这样做:
use constant REPORT_LINE_LEN => 200;
while(($rc = read $infile, $report_line, REPORT_LINE_LEN(), 0) != 0)
{
chomp $report_line;
$report_line .= "\r\n" . "\n";
print $outfile $report_line;
}
回车 ^M 字符位于位置 201,我需要在 202 处有一个 \n,但如果不将记录的长度增加超过 202 个字节,似乎无法将其放置在那里。我正在用 vim 验证 ^M 的位置,这表明文件仍然是 Unix 格式。
我已经搜索了很多资源,并且很难过。任何帮助将不胜感激,包括最后两个字节在 vim 中的显示方式。
我正在 vim 中通过按“$”来确认记录长度以到达行尾。现在,它显示 201。我还使用head -n 1 rmvtape.out | wc -c 来确认记录的长度,其中rmvtape.out 是包含这些记录的文件。长度为202。
那么,在这种情况下,^M 在 vim 中是不可见的吗?
【问题讨论】:
-
确保您的输出文件使用的是
binmode。那么只需执行“\r\n”就足够了。 -
您能否详细说明您是如何检查记录长度的?另外,“超过 202 字节”是多长时间?
-
@Mr.Llama 刚刚编辑了带有答案的文件。
-
试试
head -c 202 rmvtape.out | od -ax。这将为您提供该行的十六进制转储,这将帮助您解决长度问题。请注意,我使用的是head -c 202,因为head -n 1将拆分第一个\n,这在技术上是记录的一部分。
标签: perl vim file-format