我有两个文本文件,内容几乎相同,行数相同。每个都有一个标题(第1行),后跟两个序列(由\ n分隔),标题再次(第4行),两个序列,再次标题(第7行),... 我要做的是写一个新文件C,它从文件A(行1..3)获取标题和序列,然后是文件B中的两个序列,文件A中接下来的3行,文件中接下来的两个序列B.它看起来像这样:
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 :(得分:0)
问题在于
for my $j (0..$#FILE_A){
认为它负责让$j
获取0
和$#FILE_A
之间的每个值;但是你有这样的行:
$i++; $j++;
修改$j
而没有for
- 循环管理它。
由于你有这样一个简单的模式,每组的线数很少,我认为写这样的东西更简单:
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];
}