[英]Perl Filehandle Open Truncates the File
我正在編寫我的第一個Perl程序,這太麻煩了。 我很高興地說,大多數情況下一切正常,並且搜索該網站已幫助解決了我的大部分問題。
我正在使用由空格分隔的值組成的大文件。 我向下過濾文件以僅在其中一列中顯示具有特定值的行,然后將過濾后的數據輸出到新文件。 然后,我嘗試將文件的所有行壓入數組以用於循環。 這是一些代碼:
my @orig_file_lines = <ORIG_FILE>;
open MAKE_NEW_FILE, '>', 'newfile.dat' or die "Couldn't open newfile.dat!";
&make_new_file(\@orig_file_lines); ##Creates a new, filtered newfile.dat
open NEW, "newfile.dat" or die "Couldn't open newfile.dat!";
my @lines;
while(<NEW>){
push(@lines,$_);
}
printf("%s\n", $lines[$#lines]); ##Should print entirety of last line of newfile.dat
問題是雙重的:1. $#lines = 24500,這里新創建的文件(newfile.dat)實際上有24503行(所以應該是24502),2. printf語句返回截斷的行24500,切斷該行過早地大約兩列。
每隔一行,例如$ lines [0-24499],即使它比$ lines [24500]寬,也將成功打印整行,因此該特定行的長度(它們都長)不是問題。 但是,好像數組由於某種原因變得太大了,因為它先切掉了一部分,然后又切掉了下兩行。 如果是這樣,我該如何應對?
您好像忘了先關閉MAKE_NEW_FILE,然后再使用NEW打開同一文件。
需要注意的其他幾點:
不推薦使用&function
語法,因為它繞過了原型檢查。
我相信您正在使用use warnings;
並use strict;
。
我注意到您有兩個參數打開和一個三個參數open
。 盡管兩者都是合法的,但是它們具有不同的心態,這使得將它們一起使用會使程序員感到困惑。 我會保持開放的三個論點,因為我認為這更容易理解(除非您正在玩代碼高爾夫)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.