Perl - formaty

Perl używa szablonu do pisania zwanego „formatem” do tworzenia raportów. Aby użyć funkcji formatowania Perla, musisz najpierw zdefiniować format, a następnie możesz użyć tego formatu do zapisania sformatowanych danych.

Zdefiniuj format

Poniżej znajduje się składnia definiująca format Perla -

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

Tutaj FormatNamereprezentuje nazwę formatu. Plikfieldlinejest specyficzny sposób, w jaki dane powinny być sformatowane. Linie wartości reprezentują wartości, które zostaną wprowadzone w wierszu pola. Kończysz format pojedynczą kropką.

Kolejny fieldlinemoże zawierać dowolny tekst lub symbole pól. W polach jest miejsce na dane, które zostaną tam umieszczone w późniejszym terminie. Symbol pola ma format -

@<<<<

Ten symbol pola jest wyrównany do lewej, z miejscem na pole równym 5. Musisz policzyć znaki @ i <, aby poznać liczbę spacji w polu. Inni posiadacze pola to -

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

Przykładowy format to -

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

W tym przykładzie $ nazwa zostanie zapisana jako wyrównanie do lewej w obrębie 22 znaków, a po tym wieku zostanie zapisana w dwóch spacjach.

Korzystanie z formatu

Aby wywołać tę deklarację formatu, użylibyśmy rozszerzenia write słowo kluczowe -

write EMPLOYEE;

Problem polega na tym, że nazwa formatu jest zwykle nazwą otwartego uchwytu pliku, a instrukcja write wyśle ​​dane wyjściowe do tego uchwytu pliku. Ponieważ chcemy, aby dane były wysyłane do STDOUT, musimy skojarzyć PRACOWNIKA z uchwytem pliku STDOUT. Najpierw jednak musimy upewnić się, że STDOUT jest naszym wybranym uchwytem pliku, używając funkcji select ().

select(STDOUT);

Następnie skojarzymy PRACOWNIKA ze STDOUT, ustawiając nową nazwę formatu za pomocą STDOUT, używając specjalnej zmiennej $ ~ lub $ FORMAT_NAME w następujący sposób -

$~ = "EMPLOYEE";

Kiedy teraz wykonamy write (), dane zostaną wysłane do STDOUT. Pamiętaj: jeśli zamierzasz zapisać raport w jakimkolwiek innym uchwycie pliku zamiast STDOUT, możesz użyć funkcji select (), aby wybrać ten uchwyt pliku, a reszta logiki pozostanie taka sama.

Weźmy następujący przykład. Tutaj mamy zakodowane wartości tylko do pokazania użycia. Podczas rzeczywistego użytkowania będziesz odczytywał wartości z pliku lub bazy danych w celu wygenerowania rzeczywistych raportów i może być konieczne ponowne zapisanie raportu końcowego do pliku.

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

Po uruchomieniu da to następujący wynik -

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

Zdefiniuj nagłówek raportu

Wszystko wygląda dobrze. Ale byłbyś zainteresowany dodaniem nagłówka do raportu. Ten nagłówek zostanie wydrukowany na górze każdej strony. Jest to bardzo proste. Oprócz zdefiniowania szablonu należałoby zdefiniować nagłówek i przypisać go do zmiennej $ ^ lub $ 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;
}

Teraz Twój raport będzie wyglądał następująco -

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

Zdefiniuj paginację

A co jeśli raport zajmuje więcej niż jedną stronę? Masz na to rozwiązanie, po prostu użyj$% lub $ FORMAT_PAGE_NUMBER zmienne wraz z następującym nagłówkiem -

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

Teraz wynik będzie wyglądał następująco -

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

Liczba wierszy na stronie

Możesz ustawić liczbę wierszy na stronę za pomocą specjalnej zmiennej $= (lub $ FORMAT_LINES_PER_PAGE), Domyślnie $ = będzie wynosić 60.

Zdefiniuj stopkę raportu

Chociaż $ ^ lub $ FORMAT_TOP_NAME zawiera nazwę bieżącego formatu nagłówka, nie ma odpowiedniego mechanizmu, który automatycznie zrobiłby to samo dla stopki. Jeśli masz stopkę o stałym rozmiarze, możesz uzyskać stopki, sprawdzając zmienną $ - lub $ FORMAT_LINES_LEFT przed każdym poleceniem write () i samodzielnie drukować stopkę, jeśli to konieczne, używając innego formatu zdefiniowanego w następujący sposób -

format EMPLOYEE_BOTTOM =
End of Page @<
            $%
.

Aby uzyskać pełny zestaw zmiennych związanych z formatowaniem, zapoznaj się z sekcją Zmienne specjalne Perla .