Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Perl 将\x0D\x0A添加到记录末尾_Perl_Vim_File Format - Fatal编程技术网

Perl 将\x0D\x0A添加到记录末尾

Perl 将\x0D\x0A添加到记录末尾,perl,vim,file-format,Perl,Vim,File Format,我正在编写一个Perl程序,在200字节记录的末尾添加\r\n第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

我正在编写一个Perl程序,在200字节记录的末尾添加\r\n第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-n1rmvtape.out | wc-c
来确认记录的长度,其中
rmvtape.out
是包含这些记录的文件。长度为
202

那么,在这种情况下,^M在vim中是不可见的吗

$report\u line.=“\r\n”。“\n”

您正在此处添加三个字符,例如
\r
\n
和另一个
\n
。 省略最后一个
\n
就可以了,例如:

$report_line .= "\r\n";

确保输出文件正在使用。那么只做“\r\n”就足够了。您能详细说明一下如何检查记录长度吗?还有,“超过202字节”有多长?@Mr.Llama刚刚用答案编辑了文件。试试
head-c 202 rmvtape.out | od-ax
。这将为您提供一个十六进制的行转储,这将帮助您解决长度问题。请注意,我使用的是
head-c202
,因为
head-n1
将在第一个
\n
上拆分,这在技术上是记录的一部分。@Steffen\u Ulrich我尝试过这个,但vim中的位置计数返回到200,而vim中缺少^m。该类型仍然是unix。请尝试
warn unpack(“H*”,$report\u line)
查看行中的八位字节,并使用
length($report\u line)
检查长度。如果这些给出了正确的值,那么
$output
就是您的问题,例如使用@Miller建议的binmode。不要相信vim,使用hexdump查看真正的内容。@Steffen_Ulrich您的方法将产生202个字节。与hexdump确认。我感谢您的回答和评论。这基本上告诉了我最初的想法,这些是记录终止符,实际上不是记录的一部分。如果输出中存在^M,但在Vim中丢失了,那么Vim可能实际将文件检测为dos格式。加载此文件时,您确定Vim的“fileformat”值实际上保持在“unix”位置吗?如果每行都以\r\n结尾,则Vim将默认以DOS格式加载它。