【问题标题】:Need to print the statement inside for loop only once - Perl只需在 for 循环中打印一次语句 - Perl
【发布时间】:2015-02-05 14:25:03
【问题描述】:

我有一个嵌套的 for 循环,我想在 for 循环中只打印一次语句。如果您看到第 4 个 if 语句“if(@arrayTB[$num] ne @arraynew[$num1])”,它打印的次数超过了所需的次数。我正在写入 CSV 文件,但我无法使用 CSV 模块来执行此操作,因为我的主管告诉我不要这样做。我希望循环比较文件中所有可能的目标分支(TB),如果找不到,则打印 3 个空格。现在它每次进行比较时都会打印 3 个空格。关于如何解决此问题的任何建议?

                 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|,"",""|;
                                    }
                         }

                    }

【问题讨论】:

    标签: perl csv for-loop


    【解决方案1】:

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

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

    我不知道你老板的推理,但无论如何使用正确的模块来解析 CSV 将是正确的解决方案

    【讨论】:

    • 是的,我的计数器在进入 for 循环之前被设置为零。我尝试了你的建议,如果数组中的第一个元素不匹配,它只会打印一个空格,之后它会打印与其他数组匹配的所有内容。我想在数组中的元素不匹配的地方打印一个空格。
    • @Abhishek:抱歉,我不太明白你的意思。你在if 有条件地匹配吗? print 会输出什么吗?输出正确吗?顺便说一句,你不应该将数组项与@-sigil 一起使用,这需要一个数组片段并且在大多数情况下是错误的
    • 是的,我确实得到了这个 if 语句“if(@arrayTB[$num] ne @arraynew[$num1])”中第一个元素的匹配项,它会根据需要打印空格,但之后即使元素不相等,它也不打印空格的第一个元素。 Print 输出另一个 if 条件 "if(@arraybaseline[$num1] eq "null")" 和 "if(@arraybaseline[$num1] ne "null")" 中的语句
    • @Abhishek: 第一个元素后$counter 的值是多少?我的意思是,当您期望打印出来时,它并没有发生。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-31
    • 2020-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-30
    • 1970-01-01
    相关资源
    最近更新 更多