【问题标题】:Perl Output issuesPerl 输出问题
【发布时间】:2010-09-30 21:10:43
【问题描述】:

这看起来非常琐碎,但对我来说没有任何意义。

我有以下代码片段:

foreach $i (@inputtext)
{
@line = split(/\|/, $i);
 foreach $j (@line)
 {
  print "$j, ";  
 }
}

输入是以下三行,相同:

98465895|不知道这里有什么|123 任何地方车道|城市|ST|55555|data1|pass1|data2|pass2|data3|pass3|更多东西

输出结果是这样的:

98465895,不知道这里发生了什么,123 任何车道,城市,ST,55555,data1,pass1,data2,pass2,data3,pass3,更多东西
, 98465895, 不知道这里发生了什么, 123 任何车道, 城市, ST, 55555, data1, pass1, data2, pass2, data3, pass3, 更多的东西
, 98465895, 不知道这里发生了什么, 123 任意车道, 城市, ST, 55555, data1, pass1, data2, pass2, data3, pass3, 更多的东西

我认为没有任何逻辑原因会在打印语句中创建一个结束行,将逗号扔到下一行,并弄乱输出的下一行。有人有什么建议吗?

谢谢

【问题讨论】:

    标签: perl printing


    【解决方案1】:

    我们看不到从文件中读取的内容。您是否在输入文本上调用 chomp 以消除尾随的换行符?

    另外,不要使用for 循环来使用逗号连接字段,而是这样做:

    print join( ', ', @line );
    

    【讨论】:

      【解决方案2】:

      我敢打赌 $i 在你 split 之前包含一个换行符。先试试chomping。

      【讨论】:

        【解决方案3】:

        我不确定这段代码之前是什么,但我敢打赌它是这样的:

        open FILE, 'filename';
        @inputtext = <FILE>;
        

        Perl 已针对您以不同的方式解决问题进行了优化:

        use strict; use warnings;  # helps you avoid errors early
        
        open my $file, '<', 'filename' or die $!;
        
        while (<$file>) {                   # loads the next line from $file into $_
            chomp;                          # strip newline from $_
            print join ', ' => split /\|/;  # split uses $_ without an arg
            # or use split's output for anything else
        }
        

        如果您在子例程中使用此代码,请确保在 while 循环之前使用 local $_;

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2011-09-02
          • 1970-01-01
          • 2011-02-27
          • 1970-01-01
          • 2019-11-04
          • 2012-06-15
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多