2015-02-05 69 views
0

我有一个嵌套for循环,我只想在for循环内打印一条语句。如果您看到第4条if语句“if(@arrayTB [$ num] ne @arraynew [$ num1])”,则它会输出比所需更多的次数。我正在写一个CSV文件,因为我的主管在工作中告诉我不要这样做,所以我不能使用CSV模块来做到这一点。我想循环比较文件中所有可能的目标分支(TB),如果找不到,则打印3个空格。现在它每次打印3个空格进行比较。任何关于如何解决这个问题的建议?只需要在for循环内打印语句一次 - Perl

    for (my $num = 0; $num <= $lengthTB; $num = $num + 2)  
        { 
         for (my $num1 = 0; $num1 <= $lengthTBresult; $num1++) 
         {  
           if(@arrayTB[$num] eq @arrayTBresult[$num1]) 
           { 
            if (@arraybaseline[$num1] eq "null") 
             { 
              print OutFile qq|,@arrayCPnew[$num1],@status[1]|; 
             } 
            if (@arraybaseline[$num1] ne "null") 
             { 
              print OutFile qq|,@arrayCPnew[$num1],@status[0]|; 
             } 
           } 
           if (@arrayTB[$num] ne @arraynew[$num1])                    #if(exists $noTBs{$num}) 
            { 
             $counter++; 
             print OutFile qq|,"",""|; 
            } 
         } 

        } 

回答

2

如果我理解正确,在您进入此特定循环之前,您的$counter设置为零/未定义?然后,你可以这样实现它:

print OutFile qq|,"",""| unless $counter; 
$counter++; 

我不知道你的老板的推理,但使用权模块用于解析CSV将是正确的解决方案,反正

+0

是的,我的计数器设置为零在进入for循环之前。我尝试了你的建议,它只打印一个空格,如果数组中的第一个元素不匹配,那么它会打印与一行中的其他数组相匹配的所有内容。我想打印一个数组中元素不匹配的空间。 – Abhishek 2015-02-05 14:55:33

+0

@ Abhishek:对不起,我不完全明白,你的意思。有条件的话,你在那里比赛吗?那么'print'输出什么东西?输出是否正确?顺便说一句,你不应该使用@ -sigil数组项,这需要一个数组的切片,并在大多数情况下是错误的 – 2015-02-05 15:04:05

+0

是的,我确实得到匹配的第一个元素在这个if语句“if(@arrayTB [$ num] ne @arraynew [$ num1])“,它会根据需要打印空白空间,但在第一个元素之后,即使元素不相等,它也不会打印空白空间。如果条件为“if(@arraybaseline [$ num1] eq”null“)”和“if(@arraybaseline [$ num1] ne”null“)” – Abhishek 2015-02-05 15:11:23