Perl - Formatos

Perl utiliza una plantilla de escritura llamada "formato" para generar informes. Para usar la función de formato de Perl, primero debe definir un formato y luego puede usar ese formato para escribir datos formateados.

Definir un formato

A continuación se muestra la sintaxis para definir un formato Perl:

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

aquí FormatNamerepresenta el nombre del formato. losfieldlinees la forma específica, los datos deben formatearse. Las líneas de valores representan los valores que se ingresarán en la línea de campo. Terminas el formato con un solo punto.

próximo fieldlinepuede contener cualquier texto o marcadores de campo. Los marcadores de campo tienen espacio para los datos que se colocarán allí en una fecha posterior. Un marcador de campo tiene el formato:

@<<<<

Este marcador de campo está justificado a la izquierda, con un espacio de campo de 5. Debe contar el signo @ y los signos <para saber el número de espacios en el campo. Otros titulares de campo incluyen:

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

Un formato de ejemplo sería:

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

En este ejemplo, $ name se escribiría justificado a la izquierda dentro de 22 espacios de caracteres y después de esa edad se escribiría en dos espacios.

Usando el formato

Para invocar esta declaración de formato, usaríamos el write palabra clave -

write EMPLOYEE;

El problema es que el nombre del formato suele ser el nombre de un identificador de archivo abierto y la instrucción de escritura enviará la salida a este identificador de archivo. Como queremos que los datos se envíen al STDOUT, debemos asociar EMPLOYEE con el identificador de archivo STDOUT. Primero, sin embargo, debemos asegurarnos de que STDOUT sea nuestro identificador de archivo seleccionado, usando la función select ().

select(STDOUT);

Luego asociaríamos EMPLEADO con STDOUT estableciendo el nuevo nombre de formato con STDOUT, usando la variable especial $ ~ o $ FORMAT_NAME de la siguiente manera:

$~ = "EMPLOYEE";

Cuando ahora hacemos un write (), los datos se enviarán a STDOUT. Recuerde: si va a escribir su informe en cualquier otro identificador de archivo en lugar de STDOUT, puede usar la función select () para seleccionar ese identificador de archivo y el resto de la lógica seguirá siendo la misma.

Tomemos el siguiente ejemplo. Aquí tenemos valores codificados de forma rígida solo para mostrar el uso. En el uso real, leerá valores de un archivo o base de datos para generar informes reales y es posible que deba escribir el informe final nuevamente en un archivo.

#!/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;
}

Cuando se ejecuta, esto producirá el siguiente resultado:

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

Definir un encabezado de informe

Todo luce bien. Pero le interesaría agregar un encabezado a su informe. Este encabezado se imprimirá en la parte superior de cada página. Es muy sencillo hacer esto. Además de definir una plantilla, tendría que definir un encabezado y asignarlo a la variable $ ^ o $ 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;
}

Ahora su informe se verá así:

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

Definir una paginación

¿Qué pasa si su informe ocupa más de una página? Tienes una solución para eso, simplemente usa$% o $ FORMAT_PAGE_NUMBER variable junto con el encabezado de la siguiente manera:

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

Ahora su salida se verá así:

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

Número de líneas en una página

Puede establecer el número de líneas por página usando una variable especial $= (o $ FORMAT_LINES_PER_PAGE), por defecto $ = será 60.

Definir un pie de página de informe

Si bien $ ^ o $ FORMAT_TOP_NAME contienen el nombre del formato de encabezado actual, no existe un mecanismo correspondiente para hacer automáticamente lo mismo con un pie de página. Si tiene un pie de página de tamaño fijo, puede obtener pies de página marcando la variable $ - o $ FORMAT_LINES_LEFT antes de cada escritura () e imprima el pie de página usted mismo si es necesario utilizando otro formato definido de la siguiente manera:

format EMPLOYEE_BOTTOM =
End of Page @<
            $%
.

Para obtener un conjunto completo de variables relacionadas con el formateo, consulte la sección Variables especiales de Perl .