вопрос форматирования Perl - PullRequest
1 голос
/ 23 ноября 2010

Я хочу отобразить таблицу в perl, имена строк и столбцов которой будут иметь переменную длину. Я хочу, чтобы столбцы были аккуратно выровнены. Проблема в том, что заголовки строк и столбцов имеют переменную длину, поэтому выравнивание для разных файлов сдвигается.

Вот код, который я использую для форматирования:

print "\n              ";
foreach (keys(%senseToSenseCountHash))
{
 printf "%15s",$_;
}
print "\n";
print "------------------------------------------------------------\n";

my $space = "---";

foreach my $realSense (keys(%actualSenseToWronglyDisambiguatedSense))
{ 
 printf "%s",$realSense; 

        foreach (keys(%senseToSenseCountHash))
 {
   if(exists($actualSenseToWronglyDisambiguatedSense{$realSense}[0]{$_}))
   {
  printf "%15s",$actualSenseToWronglyDisambiguatedSense{$realSense}[0]{$_};
   }
   else
   {
  printf "%15s",$space;
   }
 }
 print "\n";
}

Выводы, которые я получаю, следующие (для разных файлов, с которыми я должен тестировать):

                    Microsoft            IBM
------------------------------------------------------------
Microsoft            896            120
IBM             66            661



                     SERVE12         SERVE2         SERVE6        SERVE10
------------------------------------------------------------
SERVE12            319             32             19              8
SERVE2             44            159             39             25
SERVE6             22              9            102              1
SERVE10             14             16             12            494



                       HARD3          HARD2          HARD1
------------------------------------------------------------
HARD3             68              7             27
HARD2              6             60             90
HARD1             37             69            937

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

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 23 ноября 2010

Нашел ответ, вставив его здесь на случай, если кто-то захочет его использовать.

printf "%10s %-2s",'----------','|';

foreach(keys(%senseToSenseCountHash))
{
    printf "%s",'----------------';
}
print "\n";

printf "%10s %-2s",'          ','|';

foreach(keys(%senseToSenseCountHash))
{
    printf "%-14s",$_;
}
print "\n";

printf "%10s %-2s",'----------','|';

foreach(keys(%senseToSenseCountHash))
{
    printf "%s",'----------------';
}
print "\n";

foreach my $key (sort { $senseToSenseCountHash{$b} <=> 
                              $senseToSenseCountHash{$a} } keys %senseToSenseCountHash )
{
    $maxSense = $senseToSenseCountHash{$key};
    last;   
}

my $space = "---";

foreach my $realSense (keys(%actualSenseToWronglyDisambiguatedSense))
{

    printf "%-10s %-2s",$realSense,'|'; 
        foreach (keys(%senseToSenseCountHash))
    {
        if(exists($actualSenseToWronglyDisambiguatedSense{$realSense}[0]{$_}))
        {
            printf "%-15s",$actualSenseToWronglyDisambiguatedSense{$realSense}[0]{$_};
        }
        else
        {
            printf "%-15s",$space;
        }
    }
    print "\n";
}

printf "%10s %-2s",'----------','|';

foreach(keys(%senseToSenseCountHash))
{
    printf "%s",'----------------';
}
print "\n";

Вывод:

---------- | ------------------------------------------------
           | HARD3         HARD2         HARD1         
---------- | ------------------------------------------------
HARD3      | 68             7              27             
HARD2      | 6              60             90             
HARD1      | 37             69             937            
---------- | ------------------------------------------------


---------- | ----------------------------------------------------------------
           | SERVE12       SERVE2        SERVE6        SERVE10       
---------- | ----------------------------------------------------------------
SERVE12    | 319            32             19             8              
SERVE2     | 44             159            39             25             
SERVE6     | 22             9              102            1              
SERVE10    | 14             16             12             494            
---------- | ----------------------------------------------------------------
1 голос
/ 23 ноября 2010

Эта строка:

printf "%s",$realSense; 

не имеет определенной ширины и отбрасывает выравнивание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...