如何在perl中从csv文件进行对字符串比较

时间:2011-03-18 20:55:25

标签: regex perl string compare

我的代码存在问题,无法进行字符串对比较。我在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++;

}

非常感谢任何帮助。

2 个答案:

答案 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])