다음 입력이 주어진 경우Perl : 문자열 내의 숫자 비교
A | 11 162 60 90 - 141 184
B | 231 322 - 306 305 285 350
A의 경우, (11,162) 또는 (60,90)을 포함하여 141이 거짓인지 확인하고 싶습니다. 예인 경우 "In A, 141 lies between (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