2013-07-10 5 views
2

У меня есть два различных входных файлов из атома зонда:Как написать несколько выходных файлов в цикле foreach в perl?

1) POS файл с 4 колонки, xyzi (который я преобразовывают из двоичного)

2) RRNG файл с информацией о атомов в образце и их соответствующие значения «i».

Я могу извлечь всю необходимую информацию из входных файлов и сохранить их в массивы, но моя проблема возникает, когда я пытаюсь сохранить информацию в нескольких выходных файлах.

Вот то, что я до сих пор:

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 и хранить эти пункты, как х, у , z и i в выходном файле, но я хочу сделать это для всех 51 диапазонов значений «i».

Этот код отлично подходит для одного пика без цикла foreach, но я не хочу его жестко кодировать для 51 разных диапазонов.

Я надеюсь, что это ясно. Благодарю.

+0

пытается понять, но ваш код doen't содержит никаких 'i'. Итак, откуда приходит «я»? (в коде '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 - лучшая практика. синтаксис 'open FILE' создает глобальную дескриптор файла - это может быть причиной проблем. – kjprice

Смежные вопросы