Как сделать сравнение парных строк из CSV-файла в Perl - PullRequest
0 голосов
/ 18 марта 2011

У меня проблема с кодом для сравнения пар строк. мои данные в 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 ]

3 голосов
/ 19 марта 2011

Эта строка

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

, вероятно, не выполняет то, что вы ожидаете.Это не эквивалентно

if ($field[4] eq $field[2] && $field[4] eq $field[3]) {
0 голосов
/ 19 марта 2011

Оператор '&&' возвращает последнее оцененное значение.Оператор '&& "сначала вычисляет левый операнд, за которым следует правый операнд, и возвращает правый операнд. Так в выражении - ($ field [4] eq ($ field [2] && $ field [3])), это, по сути, означает, что вы делаете ($ field [4] eq $ field [3]).

Конечно, предполагая, что и левый, и правый операнд верны.

КакПо предложению @mob, вы, вероятно, должны это сделать - ($ field [4] eq $ field [2] && $ field [4] eq $ field [3])

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...