При использовании следующих данных:Perl: Сравнение номеров в строке
A | 11 162 60 90 - 141 184
B | 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;
Я не знаю, сколько элементов в каждой строке. Поэтому я не знаю, как реализовать цикл для сравнения. Любые рекомендации по улучшению кода будут оценены.
Благодарим за помощь.
Эй, спасибо большое. Оно работает. – zock