Perl - Formati

Perl utilizza un modello di scrittura chiamato "formato" per l'output dei rapporti. Per usare la funzionalità di formattazione di Perl, devi prima definire un formato e poi puoi usare quel formato per scrivere dati formattati.

Definisci un formato

Di seguito è riportata la sintassi per definire un formato Perl:

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

Qui FormatNamerappresenta il nome del formato. Ilfieldlineè il modo specifico, i dati dovrebbero essere formattati. Le righe dei valori rappresentano i valori che verranno inseriti nella riga del campo. Finisci il formato con un solo punto.

Il prossimo fieldlinepuò contenere qualsiasi testo o fieldholder. I titolari di campo mantengono lo spazio per i dati che verranno inseriti lì in un secondo momento. Un titolare di campo ha il formato:

@<<<<

Questo segnaposto è giustificato a sinistra, con uno spazio del campo pari a 5. È necessario contare i segni @ e <per conoscere il numero di spazi nel campo. Altri detentori di campo includono:

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

Un formato di esempio potrebbe essere:

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

In questo esempio, $ nome verrebbe scritto come giustificato a sinistra all'interno di 22 spazi di caratteri e dopo quell'età verrà scritto in due spazi.

Utilizzando il formato

Per richiamare questa dichiarazione di formato, useremo il write parola chiave -

write EMPLOYEE;

Il problema è che il nome del formato è in genere il nome di un handle di file aperto e l'istruzione write invierà l'output a questo handle di file. Dato che vogliamo che i dati vengano inviati allo STDOUT, dobbiamo associare EMPLOYEE al filehandle STDOUT. Per prima cosa, tuttavia, dobbiamo assicurarci che STDOUT sia il nostro handle di file selezionato, utilizzando la funzione select ().

select(STDOUT);

Assoceremo quindi EMPLOYEE a STDOUT impostando il nome del nuovo formato con STDOUT, utilizzando la variabile speciale $ ~ o $ FORMAT_NAME come segue:

$~ = "EMPLOYEE";

Quando ora eseguiamo una write (), i dati verranno inviati a STDOUT. Ricorda: se hai intenzione di scrivere il tuo report in qualsiasi altro handle di file invece di STDOUT, puoi usare la funzione select () per selezionare quell'handle di file e il resto della logica rimarrà la stessa.

Prendiamo il seguente esempio. Qui abbiamo valori hard coded solo per mostrare l'utilizzo. Nell'utilizzo effettivo si leggeranno i valori da un file o database per generare report effettivi e potrebbe essere necessario scrivere nuovamente il report finale in un file.

#!/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 viene eseguito, questo produrrà il seguente risultato:

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

Definisci un'intestazione del rapporto

Sembra tutto a posto. Ma ti interesserebbe aggiungere un'intestazione al tuo rapporto. Questa intestazione verrà stampata nella parte superiore di ogni pagina. È molto semplice farlo. Oltre a definire un modello, dovresti definire un'intestazione e assegnarla alla variabile $ ^ 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;
}

Ora il tuo rapporto avrà il seguente aspetto:

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

Definisci un'impaginazione

E se il tuo rapporto occupa più di una pagina? Hai una soluzione per questo, usa semplicemente$% o $ FORMAT_PAGE_NUMBER vairable insieme all'intestazione come segue -

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

Ora il tuo output sarà come segue:

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

Numero di righe su una pagina

È possibile impostare il numero di righe per pagina utilizzando una variabile speciale $= (o $ FORMAT_LINES_PER_PAGE), per impostazione predefinita $ = sarà 60.

Definisci un piè di pagina del rapporto

Sebbene $ ^ o $ FORMAT_TOP_NAME contenga il nome del formato dell'intestazione corrente, non esiste un meccanismo corrispondente per fare automaticamente la stessa cosa per un piè di pagina. Se hai un piè di pagina di dimensione fissa, puoi ottenere i piè di pagina controllando la variabile $ - o $ FORMAT_LINES_LEFT prima di ogni write () e stampare il piè di pagina tu stesso se necessario utilizzando un altro formato definito come segue -

format EMPLOYEE_BOTTOM =
End of Page @<
            $%
.

Per un set completo di variabili relative alla formattazione, fare riferimento alla sezione Variabili speciali di Perl .