簡體   English   中英

Perl Filehandle Open截斷文件

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM