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 .