Perl - Format

Perl menggunakan template penulisan yang disebut 'format' untuk menghasilkan laporan. Untuk menggunakan fitur format Perl, Anda harus menentukan format terlebih dahulu dan kemudian Anda dapat menggunakan format tersebut untuk menulis data yang diformat.

Tentukan Format

Berikut ini adalah sintaks untuk mendefinisikan format Perl -

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

Sini FormatNamemewakili nama format. ItufieldlineDengan cara tertentu, data harus diformat. Garis nilai mewakili nilai yang akan dimasukkan ke dalam garis bidang. Anda mengakhiri format dengan satu titik.

Lanjut fieldlinebisa berisi teks atau fieldholder. Pemegang lapangan memiliki ruang untuk data yang akan ditempatkan di sana di kemudian hari. Seorang pemegang lapangan memiliki format -

@<<<<

Penampung ini rata kiri, dengan spasi 5. Anda harus menghitung tanda @ dan <untuk mengetahui jumlah spasi di kolom. Pemegang lapangan lainnya termasuk -

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

Format contoh adalah -

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

Dalam contoh ini, $ name akan ditulis sebagai rata kiri dalam 22 spasi karakter dan setelah usia tersebut akan ditulis dalam dua spasi.

Menggunakan Format

Untuk memanggil deklarasi format ini, kami akan menggunakan write kata kunci -

write EMPLOYEE;

Masalahnya adalah bahwa nama format biasanya merupakan nama pegangan file yang terbuka, dan pernyataan tulis akan mengirimkan output ke pegangan file ini. Karena kita ingin data dikirim ke STDOUT, kita harus mengasosiasikan EMPLOYEE dengan filehandle STDOUT. Pertama, bagaimanapun, kita harus memastikan bahwa STDOUT adalah pegangan file yang kita pilih, menggunakan fungsi select ().

select(STDOUT);

Kami kemudian akan mengasosiasikan EMPLOYEE dengan STDOUT dengan menyetel nama format baru dengan STDOUT, menggunakan variabel khusus $ ~ atau $ FORMAT_NAME sebagai berikut -

$~ = "EMPLOYEE";

Ketika kita sekarang melakukan write (), data akan dikirim ke STDOUT. Ingat: jika Anda akan menulis laporan Anda di pegangan file lain selain STDOUT maka Anda dapat menggunakan fungsi select () untuk memilih pegangan file itu dan logika lainnya akan tetap sama.

Mari kita ambil contoh berikut. Di sini kami memiliki nilai kode keras hanya untuk menunjukkan penggunaan. Dalam penggunaan aktual, Anda akan membaca nilai dari file atau database untuk menghasilkan laporan aktual dan Anda mungkin perlu menulis laporan akhir lagi ke dalam 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;
}

Saat dijalankan, ini akan menghasilkan hasil sebagai berikut -

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

Tentukan Header Laporan

Semuanya terlihat baik-baik saja. Tetapi Anda akan tertarik untuk menambahkan tajuk ke laporan Anda. Header ini akan dicetak di atas setiap halaman. Sangat mudah untuk melakukan ini. Selain menentukan template Anda harus menentukan header dan menetapkannya ke variabel $ ^ atau $ 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;
}

Sekarang laporan Anda akan terlihat seperti -

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

Tentukan Pagination

Bagaimana jika laporan Anda mengambil lebih dari satu halaman? Anda memiliki solusi untuk itu, cukup gunakan$% atau $ FORMAT_PAGE_NUMBER vairable beserta header sebagai berikut -

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

Sekarang output Anda akan terlihat seperti berikut -

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

Jumlah Garis di Halaman

Anda dapat mengatur jumlah baris per halaman menggunakan variabel khusus $= (atau $ FORMAT_LINES_PER_PAGE), Secara default $ = akan menjadi 60.

Tentukan Footer Laporan

Meskipun $ ^ atau $ FORMAT_TOP_NAME berisi nama format header saat ini, tidak ada mekanisme yang sesuai untuk melakukan hal yang sama secara otomatis untuk footer. Jika Anda memiliki footer berukuran tetap, Anda bisa mendapatkan footer dengan memeriksa variabel $ - atau $ FORMAT_LINES_LEFT sebelum setiap write () dan mencetak footer sendiri jika perlu menggunakan format lain yang ditentukan sebagai berikut -

format EMPLOYEE_BOTTOM =
End of Page @<
            $%
.

Untuk satu set lengkap variabel yang terkait dengan pemformatan, silakan merujuk ke bagian Variabel Khusus Perl .