2015-02-22 6 views
0

У меня есть два текстовых файла с почти идентичным содержимым, одинаковое количество строк. Каждый из них имеет заголовок (строка 1), за которым следуют две последовательности (разделенные \ n), заголовок снова (строка 4), две последовательности, заголовок снова (строка7), ... То, что я пытаюсь сделать, это написать новый файл C, который получает заголовок и последовательности из файла A (строки 1..3), а затем две последовательности из файла B, следующие 3 строки из файла A, следующие две последовательности из файла B. Это будет выглядеть примерно так:Perl - Concat 2 Файлы в определенном порядке перемещения

FILE C: 
A1 
A2 
A3 
B2 
B3 
A4 
A5 
A6 
B5 
B6 
... 

Мой код выглядит следующим образом:

my $i = 0; 
for my $j (0 .. $#FILE_A) { 
    for (0 .. 2) { 
     $FILE_C[$i] = $FILE_A[$j]; 
     $i++; $j++; 
    } 
    $i = $i + 2; 
} 

$i=3; 
my $j=1; 

for my $j (0 .. $#FILE_B) { 
    for(0 .. 1) { 
     $FILE_C[$i] = $FILE_B[$j]; 
     $i++; $j++; 
    } 
    $i = $i + 3; 
    $j++; 
} 

он не производит правильный вывод, трудно сказать, какой линии он путает.

ответ

0

Проблема заключается в том, что

for my $j (0..$#FILE_A){ 

считает, что это отвечает сделать $j принимать любое значение между 0 и $#FILE_A; но тогда у вас есть такие строки:

$i++; $j++; 

, изменяющие $j без for -loop управления ею.

Поскольку у вас есть такой простой узор, и так несколько строк в каждой группе, я думаю, что проще написать что-то вроде этого:

my $i = 0; 
for (my $i = 0, $j = 0; $j < @FILE_A; $i += 5, $j += 3) { 
    # copy header: 
    $FILE_C[$i] = $FILE_A[$j]; 
    # copy sequences from A: 
    $FILE_C[$i + 1] = $FILE_A[$j + 1]; 
    $FILE_C[$i + 2] = $FILE_A[$j + 2]; 
    # copy sequences from B: 
    $FILE_C[$i + 3] = $FILE_B[$j + 1]; 
    $FILE_C[$i + 4] = $FILE_B[$j + 2]; 
} 

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

  • Нет связанных вопросов^_^