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 .