Главная страница


ru.perl

 
 - RU.PERL ----------------------------------------------------------------------
 From : Artem Chuprina                       2:5020/400     04 May 2002  12:51:39
 To : Vladimir Korablin
 Subject : Re: рендеринг таблицы
 -------------------------------------------------------------------------------- 
 
 Здравствуй, Vladimir Korablin.
 
 VK> Есть таблица, содержащаяся в двумерном массиве. Формируется примерно так:
 VK> =========== begin _Windows Clipboard_ =============
 VK> my @table;
 
 VK> push @table, [  1,   2,  3];
 VK> push @table, [234, 234, 90];
 VK> my @headers;
 
 VK> push @headers, ['first', 'second', 'third'];
 VK> ============ end _Windows Clipboard_ ==============
 VK> Хочется её красиво отрендерить в текст, чтобы было примерно так:
 VK> =========== begin _Windows Clipboard_ =============
 VK> +-------+--------+-------+
 VK> | first | second | third |
 VK> +-------+--------+-------+
 VK> | 1     | 2      | 3     |
 VK> | 234   | 234    | 90    |
 VK> +-------+--------+-------+
 VK> ============ end _Windows Clipboard_ ==============
 VK> use what?
 
 use what, не знаю. Hо решать умею...
 
 ==== 8< [test.pl] ====
 #!/usr/bin/perl -w
 use strict;
 
 sub format_table {
   my ($table, $headers) = @_;
   my @width;
   for (my $col = 0; $col < @{$headers->[0]}; $col++) {
    $width[$col] = length($headers->[0][$col]);
    for (@$headers,@$table) {
       $width[$col] = length($_->[$col])
        if $width[$col] < length($_->[$col])
    }
   }
   my $hline = '+-' . join('-+-',map('-' x $_, @width)) . "-+\n";
   print $hline;
   for my $row (@$headers) {
    print '| ' . join(' | ',
       map(sprintf("\%-$width[$_]s",$row->[$_]),0..$#width)) . " |\n";
   }
   print $hline;
   for my $row (@$table) {
    print '| ' . join(' | ',
       map(sprintf("\%-$width[$_]s",$row->[$_]),0..$#width)) . " |\n";
   }
   print $hline;
 }
 
 my @table;
 push @table, [  1,   2,  3];
 push @table, [234, 234, 90];
 my @headers;
 push @headers, ['first', 'second', 'third'];
 format_table(\@table,\@headers);
 
 ==== >8 [test.pl] ====
 -- 
 Artem Chuprina
 Communiware.net
 RFC2822: <ran@ran.pp.ru>, FIDO: 2:5020/358.49, ICQ: 13038757
 --- ifmail v.2.15dev5
  * Origin: Leninsky 45 home network (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 рендеринг таблицы   Vladimir Korablin   04 May 2002 03:11:06 
 Re: рендеринг таблицы   Vladimir Podgorny   04 May 2002 12:39:28 
 pендеpинг таблицы   Alex Loskutov   11 May 2002 22:10:56 
 Re: рендеринг таблицы   Artem Chuprina   04 May 2002 12:51:39 
 рендеринг таблицы   Vladimir Korablin   04 May 2002 16:25:07 
 рендеринг таблицы   Alexander Kostiuchenko   05 May 2002 00:19:02 
 Re: рендеринг таблицы   Nurlan Mukhanov   04 May 2002 15:49:16 
 Re: рендеринг таблицы   Vyacheslav Nadvorny   17 May 2002 20:59:06 
Архивное /ru.perl/14454d962e7b4.html, оценка 1 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional