2015-12-15 201 views
-1

此問題與Perl有關,將數組寫入文本文件。Perl:將數組寫入文本文件

我打開一個文件名_1並將這個文件的內容存儲到一個數組中。 然後我寫這個數組到filename_2。 如果我不修改這個數組。我期望filename_2與filename_1完全相同。

事實上,我總是在filename_2的末尾看到一行額外的行。有人能幫我嗎?

這裏是我的代碼:

open(Fh, "<", "filename_1.txt") or die "Cannot open for read"; 
my @l_file_content_array = <Fh>; 
close Fh; 

open(Fh2, ">", "filename_2.txt") or die "Cannot open for write"; 
print Fh2 @l_file_content_array; 
close Fh2; 
+0

這些文件應該是相同的......當您比較它們時,有什麼區別? – Hambone

+0

區別在於filename_2的末尾有一個額外的行。當您打開這兩個文件時,可以通過光標的位置看到這種差異的指示。或者cvs軟件或其他diff軟件會指出這種差異。 – user5680155

+0

在Ubuntu 14.10的Perl 5.20中可以正常工作。你在用什麼系統? –

回答

-1

你可以試試:

chomp(my @l_file_content_array = <Fh>); 

這應該刪除您輸入文件的最後一行結束。

+0

感謝您的回覆。但是,這個建議並不行。使用上面chomp的代碼,filename_2將只包含一行,其中包含文件名_1的內容。文件名_1的所有行都被刪除並連接成一行。 – user5680155

+0

@ user5680155是的,我認爲你可以使用'print Fh2 join(「\ n」,@l_file_content_array);'而不是'print Fh2 @l_file_content_array;'但是,如果你不同意這個,你可以使用'我的@contents = ; chomp($ contents [$#contents]);'這將刪除文件的最後一行。 –

1

嘗試添加行:

$\ = ""; # set default print ending to empty string 

打印FH2 @l_file_content_array之前;線。

如果上面的「作品」,它可能意味着有一個

$\ = "\n"; 

線別處程序或包含文件。您仍然可以通過添加該行來修復本地行爲:

local $\ = "";