2015-02-05 133 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