2014-06-17 88 views
0

我正在編寫一個Perl程序,在200字節記錄末尾添加\ r \ n作爲第201和第202字節。我試圖做的是這樣的:將 x0D x0A添加到記錄結尾

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

那麼,在這種情況下,vim是不可見的嗎?

+0

確保您的輸出文件是使用['binmode'(http://perldoc.perl.org/functions/binmode.html)。那麼只要做「\ r \ n」就足夠了。 – Miller

+0

你能詳細說明你如何檢查你的記錄長度嗎?另外,「超過202字節」多長時間? –

+0

@ Mr.Llama剛剛用回答編輯了文件。 – octopusgrabbus

回答

2

$ report_line。=「\ r \ n」。 「\ n」 個;

您在這裏添加三個大字,e.g \r\n和另一\n。 省略最後\n,一切都應該罰款,例如:

$report_line .= "\r\n"; 
+0

@Steffen_Ulrich我試過了,但vim中的位置數可以回到200,並且vM中缺少^ M。該類型仍然是unix。 – octopusgrabbus

+2

嘗試'解壓縮(「H *」,$ report_line)'查看真正在行中的八位字節並用'length($ report_line)'檢查長度。如果這些給出正確的值,那麼'$ output'是你的問題,例如像@Miller建議使用binmode。不要相信vim,使用hexdump來看看真正存在的東西。 –

+0

@Steffen_Ulrich您的方法會產生202個字節。用hexdump確認。 – octopusgrabbus