代码之家  ›  专栏  ›  技术社区  ›  shinjuo

使用Perl获得格式化输出的最佳方法

  •  6
  • shinjuo  · 技术社区  · 14 年前

    我想将字符串输出为八列,但我想保持间距不变。我不想用HTML来做,但我不知道如何正常地做。例子:

    Something    Something     Something     Something     Something
    Else         Else          Else          Else          Else
    Another      Another       Another       Another       Another
    

    行数每天都会更改,但列数始终保持不变。最好的方法是什么?

    4 回复  |  直到 7 年前
        1
  •  18
  •   mob    14 年前

    printf

        printf "%-11s %-11s %-11s %-11s %-11s %-11s %-11s %-11s\n",
                $column1, $column2, ..., $column8;
    

    将模板中的“11”更改为所需的任何值。

        2
  •  11
  •   Community CDub    4 年前

    您可以使用Perl的 format . 这可能是您不了解的“复杂”方法,很可能是因为它提供了许多选项(左|中|右对齐/填充、前导0等)。

    Perldoc Example :

    Example:
       format STDOUT =
       @<<<<<<   @||||||   @>>>>>>
       "left",   "middle", "right"
       .
    Output:
       left      middle    right
    

    Here 这是另一个教程。


    工作示例:( Codepad )

    #!/usr/bin/perl -w    
    
    use strict; 
    
       sub main{    
          my @arr = (['something1','something2','something3','something4','something5','something6','something7','something8']
                    ,['else1'     ,'else2'     ,'else3'     ,'else4'     ,'else5'     ,'else6'     ,'else7'     ,'else8'     ]
                    ,['another1'  ,'another2'  ,'another3'  ,'another4'  ,'another5'  ,'another6'  ,'another7'  ,'another8'  ]
                    );
          
          for my $row (@arr) {
             format STDOUT =
    @<<<<<<<<<<<<  @<<<<<<<<<<<<  @<<<<<<<<<<<<  @<<<<<<<<<<<<  @<<<<<<<<<<<<  @<<<<<<<<<<<<  @<<<<<<<<<<<<  @<<<<<<<<<<<<  
             @$row
    .
             write;
          }
    
       }    
           
       main();   
    
        3
  •  4
  •   bessarabov    12 年前

    这是一个活生生的例子 Perl6::Form :

    #!/usr/bin/perl
    
    use Perl6::Form;
    
    my @arr = (
        [1..8],
        [9..16],
        [17..24],
    );
    
    foreach my $line (@arr) {
        print form
            "{<<<<<} "x8,
            @{$line};
    }
    

    1       2       3       4       5       6       7       8
    9       10      11      12      13      14      15      16
    17      18      19      20      21      22      23      24
    
        4
  •  4
  •   Peter Mortensen icecrime    4 年前

    我会看格式,但我会用 Perl 6's (现在是Raku)Form.pm,您可以通过 Perl6::Form 每5个人。

    其原因是内置格式有许多缺点,例如在编译时静态定义格式(即,动态构建格式可能很痛苦,通常需要字符串求值),以及一系列其他缺点,例如缺少有用的字段类型(并且不能在Perl5中扩展这些字段类型)。