我的代码存在问题,无法进行字符串对比较。我在csv文件中的数据如下
WorkerId,query,sysa,sysb,Answer.selectedsys A2ZBU2WW9WHXB7,male,lucene-std-rel,random,lucene-std-rel A2ZH0XH25HXD1Y,male,lucene-std-rel,random,lucene-std-rel A1V89RF7V0DCF5,male,lucene-noLen-rel,lucene-noLen-rr,lucene-noLen-rel AZ92SE5L1P238,male,lucene-noLen-rel,lucene-noLen-rr,lucene-noLen-rr A2ZBU2WW9WHXB7,male,lucene-std-rel,lucene-noLen-rr,lucene-std-rel A1DGNCZZWELLVX,male,lucene-std-rel,lucene-noLen-rr,lucene-noLen-rr
输出结果如下:
compare: lucene-std-rel random result: lucene-std-rel-->2 random--> 0 draw (choose both)--> 0 compare: lucene-noLen-rel lucene-noLen-rr result: lucene-noLen-rel=1 lucene-noLen-rr =1 draw=0 compare: lucene-std-rel lucene-noLen-rel result: lucene-std-rel= 1 lucene-noLen-rel=1 draw=0.
我的代码:如果用户选择sysA,sysB或两者而不考虑字符串对,似乎只计算。
for($i=0;$i<@query;++$i) {
if ( $field[1] eq $query[$i] ) {
if ( $field[4] eq $field[2]) {
print "$query[$i]: $field[4]\n";
$counta++;
}
if ( $field[4] eq $field[3]) {
print "$query[$i]: $field[4]\n";
$countb++;
}
if ( $field[4] eq ($field[2] && $field[3])) {
print "$query[$i]: $field[4]$field[3]\n";
$countc++;
}
非常感谢任何帮助。
答案 0 :(得分:3)
这一行
if ( $field[4] eq ($field[2] && $field[3])) {
可能没有按照您的预期行事。它不等于
if ($field[4] eq $field[2] && $field[4] eq $field[3]) {
答案 1 :(得分:0)
'&amp;&amp;' operator返回最后评估的值。 '&amp;&amp;“运算符首先计算左手操作数,然后是右手操作数,并返回右手操作数。 所以在表达式 - ($ field [4] eq($ field [2]&amp;&amp; $ field [3]))中,它实质上意味着你正在做($ field [4] eq $ field [3])。
当然假设左手和右手操作数均为真。
根据@mob的建议,你应该这样做 - ($ field [4] eq $ field [2]&amp;&amp; $ field [4] eq $ field [3])