给定以下输入:
一个| 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;
我不知道每一行有多少个元素。因此,我不知道如何实现一个循环进行比较。任何有关如何改进代码的指导将不胜感激。
感谢您的帮助。