次の入力があるとします。
あ| 11 162 60 90 -- 141 184
ビ| 231 322 -- 306 305 285 350
A の場合、141 が (11,162) または (60,90) の間にあるかどうかを確認します。はいの場合、「A では、141 は (11,162) の間にある」と出力します。
次に、184 が (11,162) または (60,90) の間にあるかどうかを確認します。そうではないので、何も印刷する必要はありません。
同様に、B については、(231, 322) の間にある数値を出力する必要があります。
次の Perl コードを書きましたが、正しい出力が得られません。
#!/usr/bin/perl -w
open LIST, "input.txt";
while($line=<LIST>)
{
@elem=split (/\|/,$line);
@nextone=split("--",$elem[1]);
@nextoneone = split(" ",$nextone[0]);
@nexttwo=split(" ",$nextone[1]);
if ($nexttwo[0] > $nextoneone[0] && $nexttwo[0] < $nextoneone[1])
{
print"$elem[0]\t $nexttwo[0]\t $nextoneone[0]\t $nextoneone[1]\n";
}
elsif ($nexttwo[0] > $nextoneone[2] && $nexttwo[0] < $nextoneone[3])
{
print"$elem[0]\t $nexttwo[0]\t $nextoneone[2]\t $nextoneone[3]\n";
}
elsif ($nexttwo[1] > $nextoneone[0] && $nexttwo[1] < $nextoneone[1])
{
print"$elem[0]\t $nexttwo[1]\t $nextoneone[0] \t$nextoneone[1]\n";
}
elsif ($nexttwo[1] > $nextoneone[2] && $nexttwo[1] < $nextoneone[3])
{
print"$elem[0]\t $nexttwo[1]\t $nextoneone[2] \t$nextoneone[3]\n";
}
}
close (LIST);
exit;
各行にいくつの要素があるかわかりません。したがって、比較のためのループを実装する方法がわかりません。コードを改善する方法についてのガイダンスをいただければ幸いです。
ご協力ありがとうございました。