2011-03-18 101 views
0

我有一個代碼的問題,使字符串對比較。我的csv文件數據如下如何使csv文件中的對字符串比較perl

 
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++; 

} 

任何幫助非常感謝。

回答

3

此行

if ($field[4] eq ($field[2] && $field[3])) { 

很可能無法做你的期望。它不等同於

if ($field[4] eq $field[2] && $field[4] eq $field[3]) { 
+0

謝謝。我改變了它。另一個問題是我想如何從比較字段[2]字段[3]捕獲,然後在字段[4]中計算結果。我有7名工人,每對比較工作。我想爲每個查詢計算每對的多數票。 – diera 2011-03-18 22:23:17

0

的「& &」運算符返回最後計算的值。 在'& &「操作者首先評估左手操作數,隨後用右手的操作數並返回右手操作數 所以在表達 - ($字段[4]當量($領域[2] & & $字段[ 3)),這基本上意味着你在做($場[4]等式$場[3])。

當然假設,無論是左手和右手操作數是真。

由於($ field [4] eq $ field [2] & & $ field [4] eq $ field [3])

+0

我的代碼只計算每個結果集,左,右和兩個。該對總是在查詢之間改變。我沒有得到結果,因爲我在上面給你看。 – diera 2011-03-18 22:34:06