2013-07-10 66 views
2

我不得不從一種原子探針兩個不同的輸入文件:如何在perl中的foreach循環中寫入多個輸出文件?

1)與4列,XYZI(這是我從二進制轉換)

2)與信息RRNG文件有關樣本和在原子POS文件其相應的「我」值。

我能夠從輸入文件中提取所有必要的信息,並把它們存儲陣列但我的問題是當我嘗試將信息保存到多個輸出文件。

這是我到目前爲止有:

foreach $j (0..50) { #there are 51 peaks in this data set 
    $min = $range_min[$j]; 
    $max = $range_max[$j]; 
    open(POS,$ARGV[1]); 
    while(sysread(POS,$xyzi,16)) { #input is binary 
     @row=unpack("f>4",$xyzi); 
     if ($row[3]>$min && $row[3]<=$max) { #if "i" value within 
              #the given range 
      open(FILE,">file$min_$max.txt"); 
      print FILE join(" ",@row[0,1,2,3]) . "\n"; 
     } 
    } 
} 

我想是搜索所有數據點的POS文件,$min$max之間的「我」的價值和這些點存儲爲X,Y ,z和i列在輸出文件中,但我想爲「i」值的所有51個範圍執行此操作。

此代碼工作正常的一個峯沒有foreach循環,但我不想硬編碼爲51個不同的範圍。

我希望這很清楚。謝謝。

+0

試圖理解,但你的代碼不包含任何'我'。那麼從'我'來的地方呢? (在代碼'3'中是'i'?)並且爲了你想使用'i'? – jm666

+0

@ jm666對不起,「i」值是我的POS輸入文件的第四列中的數據,它由代碼中的$ row [3]代表。 –

回答

1

這裏有一個基本的例子:

open my $fin, '<', $inputfile or die $!; 
open my $fout1, '>', $filename1 or die $!; 
open my $fout2, '>', $filename2 or die $!; 

while(my $line = <$fin>) { 
    print $fout1 $line; 
    print $fout2 $line; 
} 

只需打開多個文件句柄,並打印到每個。

+0

非常感謝!我所需要做的就是改變我如何使用「open」來更像你所說的和它的工作。我仍然是Perl新手,所以我仍然需要學習很多基礎知識。 –

+1

@IzaakWilliamson那麼,3-arg開放是更好的做法。 'open FILE'語法創建一個全局文件句柄 - 這可能會導致問題。 – kjprice