Лучший способ получить форматированный вывод с помощью Perl - PullRequest
7 голосов
/ 25 июля 2010

Я хочу вывести строки в восемь столбцов, но хочу сохранить интервал одинаковым.Я не хочу делать это в HTML, но я не уверен, как это сделать нормально.Пример:

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

Количество строк будет меняться ежедневно, но номер столбца всегда будет оставаться неизменным.Каков наилучший способ сделать это?

Ответы [ 4 ]

16 голосов
/ 25 июля 2010

printf

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

Измените «11» в шаблоне на любое нужное вам значение.

11 голосов
/ 25 июля 2010

Вы можете использовать Perl's format. Вероятно, это «сложный» метод, который вы не понимаете, скорее всего потому, что он дает вам много опций (влево | по центру | выравнивание / выравнивание вправо, ведущие 0 и т. Д.).

Пример Perldoc :

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

Вот еще один урок .


Рабочий пример: ( Кодовая панель )

#!/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();   
4 голосов
/ 25 июля 2010

Я бы посмотрел на форматирование, но я бы сделал это, используя perl6 Form.pm, который вы можете получить как Perl6 :: Form для perl5.

Причина этого заключается в том, что встроенный формат имеет ряд недостатков, таких как статически определенный формат во время компиляции (т. Е. Его динамическое построение может быть болезненным и обычно требует проверки строки), а также целый список других недостатки, такие как отсутствие полезных типов полей (и вы не можете расширить их в perl5).

3 голосов
/ 12 октября 2012

Вот живой пример 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...