Perl - formatos

Perl usa um modelo de escrita chamado 'formato' para gerar relatórios. Para usar o recurso de formato do Perl, você deve definir um formato primeiro e, em seguida, usar esse formato para gravar dados formatados.

Defina um formato

A seguir está a sintaxe para definir um formato Perl -

format FormatName =
fieldline
value_one, value_two, value_three
fieldline
value_one, value_two
.

Aqui FormatNamerepresenta o nome do formato. ofieldlineé a forma específica, os dados devem ser formatados. As linhas de valores representam os valores que serão inseridos na linha do campo. Você termina o formato com um único ponto.

Próximo fieldlinepode conter qualquer texto ou campos. Os fieldholders mantêm espaço para dados que serão colocados lá em uma data posterior. Um fieldholder tem o formato -

@<<<<

Este campo é justificado à esquerda, com um espaço de campo de 5. Você deve contar o sinal @ e os sinais <para saber o número de espaços no campo. Outros titulares de campo incluem -

@>>>> right-justified
@|||| centered
@####.## numeric field holder
@* multiline field holder

Um exemplo de formato seria -

format EMPLOYEE =
===================================
@<<<<<<<<<<<<<<<<<<<<<< @<< 
$name $age
@#####.##
$salary
===================================
.

Neste exemplo, $ name seria escrito justificado à esquerda dentro de 22 espaços de caracteres e depois dessa idade seria escrito em dois espaços.

Usando o formato

Para invocar esta declaração de formato, usaríamos o write palavra-chave -

write EMPLOYEE;

O problema é que o nome do formato é geralmente o nome de um identificador de arquivo aberto e a instrução de gravação enviará a saída para esse identificador de arquivo. Como queremos que os dados sejam enviados ao STDOUT, devemos associar EMPLOYEE ao arquivo STDOUT. Primeiro, no entanto, devemos ter certeza de que STDOUT é nosso identificador de arquivo selecionado, usando a função select ().

select(STDOUT);

Em seguida, associaríamos EMPLOYEE a STDOUT definindo o novo nome de formato com STDOUT, usando a variável especial $ ~ ou $ FORMAT_NAME da seguinte maneira -

$~ = "EMPLOYEE";

Quando agora fazemos um write (), os dados seriam enviados para STDOUT. Lembre-se: se você for escrever seu relatório em qualquer outro identificador de arquivo ao invés de STDOUT, então você pode usar a função select () para selecionar aquele identificador de arquivo e o resto da lógica permanecerá o mesmo.

Vejamos o seguinte exemplo. Aqui temos valores codificados permanentemente apenas para mostrar o uso. No uso real, você lerá valores de um arquivo ou banco de dados para gerar relatórios reais e poderá precisar gravar o relatório final novamente em um arquivo.

#!/usr/bin/perl

format EMPLOYEE =
===================================
@<<<<<<<<<<<<<<<<<<<<<< @<< 
$name $age
@#####.##
$salary
===================================
.

select(STDOUT);
$~ = EMPLOYEE;

@n = ("Ali", "Raza", "Jaffer");
@a  = (20,30, 40);
@s = (2000.00, 2500.00, 4000.000);

$i = 0;
foreach (@n) {
   $name = $_;
   $age = $a[$i];
   $salary = $s[$i++];
   write;
}

Quando executado, isso produzirá o seguinte resultado -

===================================
Ali                     20
  2000.00
===================================
===================================
Raza                    30
  2500.00
===================================
===================================
Jaffer                  40
  4000.00
===================================

Defina um cabeçalho de relatório

Tudo parece bem. Mas você estaria interessado em adicionar um cabeçalho ao seu relatório. Este cabeçalho será impresso no topo de cada página. É muito simples fazer isso. Além de definir um modelo, você teria que definir um cabeçalho e atribuí-lo à variável $ ^ ou $ FORMAT_TOP_NAME -

#!/usr/bin/perl

format EMPLOYEE =
===================================
@<<<<<<<<<<<<<<<<<<<<<< @<< 
$name $age
@#####.##
$salary
===================================
.

format EMPLOYEE_TOP =
===================================
Name                    Age
===================================
.

select(STDOUT);
$~ = EMPLOYEE;
$^ = EMPLOYEE_TOP;

@n = ("Ali", "Raza", "Jaffer");
@a  = (20,30, 40);
@s = (2000.00, 2500.00, 4000.000);

$i = 0;
foreach (@n) {
   $name = $_;
   $age = $a[$i];
   $salary = $s[$i++];
   write;
}

Agora o seu relatório será semelhante a -

===================================
Name                    Age
===================================
===================================
Ali                     20
  2000.00
===================================
===================================
Raza                    30
  2500.00
===================================
===================================
Jaffer                  40
  4000.00
===================================

Defina uma paginação

E se o seu relatório ocupar mais de uma página? Você tem uma solução para isso, basta usar$% ou $ FORMAT_PAGE_NUMBER variável junto com o cabeçalho da seguinte forma -

format EMPLOYEE_TOP =
===================================
Name                    Age Page @<
                                 $%
===================================                               
.

Agora, sua saída será a seguinte -

===================================
Name                    Age Page 1
===================================
===================================
Ali                     20
  2000.00
===================================
===================================
Raza                    30
  2500.00
===================================
===================================
Jaffer                  40
  4000.00
===================================

Número de linhas em uma página

Você pode definir o número de linhas por página usando uma variável especial $= (ou $ FORMAT_LINES_PER_PAGE), por padrão $ = será 60.

Definir um rodapé de relatório

Embora $ ^ ou $ FORMAT_TOP_NAME contenha o nome do formato do cabeçalho atual, não existe um mecanismo correspondente para fazer automaticamente o mesmo para um rodapé. Se você tiver um rodapé de tamanho fixo, poderá obter os rodapés verificando a variável $ - ou $ FORMAT_LINES_LEFT antes de cada write () e imprimir o rodapé você mesmo, se necessário, usando outro formato definido a seguir -

format EMPLOYEE_BOTTOM =
End of Page @<
            $%
.

Para um conjunto completo de variáveis ​​relacionadas à formatação, consulte a seção Variáveis ​​especiais do Perl .