Perl - รูปแบบ

Perl ใช้เทมเพลตการเขียนที่เรียกว่า 'รูปแบบ' เพื่อส่งออกรายงาน ในการใช้คุณสมบัติรูปแบบของ Perl คุณต้องกำหนดรูปแบบก่อนจากนั้นคุณจึงสามารถใช้รูปแบบนั้นเพื่อเขียนข้อมูลที่จัดรูปแบบได้

กำหนดรูปแบบ

ต่อไปนี้เป็นไวยากรณ์เพื่อกำหนดรูปแบบ Perl -

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

ที่นี่ FormatNameแทนชื่อของรูปแบบ fieldlineเป็นวิธีเฉพาะข้อมูลควรได้รับการจัดรูปแบบ เส้นค่าแสดงถึงค่าที่จะป้อนลงในเส้นเขตข้อมูล คุณสิ้นสุดรูปแบบด้วยจุดเดียว

ต่อไป fieldlineสามารถมีตัวยึดข้อความหรือฟิลด์ ผู้ถือเขตข้อมูลมีพื้นที่สำหรับข้อมูลที่จะวางไว้ที่นั่นในภายหลัง ผู้ถือฟิลด์มีรูปแบบ -

@<<<<

ตัวยึดฟิลด์นี้จัดชิดซ้ายโดยมีช่องว่าง 5 คุณต้องนับเครื่องหมาย @ และเครื่องหมาย <เพื่อให้ทราบจำนวนช่องว่างในฟิลด์ ผู้ถือสนามอื่น ๆ ได้แก่ -

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

รูปแบบตัวอย่างจะเป็น -

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

ในตัวอย่างนี้ $ name จะถูกเขียนเป็นชิดซ้ายภายในช่องว่าง 22 อักขระและหลังจากนั้นอายุจะเขียนเป็นสองช่องว่าง

การใช้รูปแบบ

ในการเรียกใช้การประกาศรูปแบบนี้เราจะใช้ไฟล์ write คีย์เวิร์ด -

write EMPLOYEE;

ปัญหาคือชื่อรูปแบบมักจะเป็นชื่อของที่จับไฟล์ที่เปิดอยู่และคำสั่ง write จะส่งเอาต์พุตไปยังหมายเลขอ้างอิงของไฟล์นี้ เนื่องจากเราต้องการให้ข้อมูลส่งไปยัง STDOUT เราจึงต้องเชื่อมโยง EMPLOYEE กับที่จัดการไฟล์ STDOUT อย่างไรก็ตามก่อนอื่นเราต้องตรวจสอบให้แน่ใจว่า STDOUT เป็นที่จับไฟล์ที่เราเลือกโดยใช้ฟังก์ชัน select ()

select(STDOUT);

จากนั้นเราจะเชื่อมโยง EMPLOYEE กับ STDOUT โดยตั้งชื่อรูปแบบใหม่ด้วย STDOUT โดยใช้ตัวแปรพิเศษ $ ~ หรือ $ FORMAT_NAME ดังนี้ -

$~ = "EMPLOYEE";

เมื่อเราทำการเขียน () ข้อมูลจะถูกส่งไปยัง STDOUT ข้อควรจำ: หากคุณกำลังจะเขียนรายงานของคุณในไฟล์แฮนเดิลอื่นแทน STDOUT คุณสามารถใช้ฟังก์ชัน select () เพื่อเลือกที่จับไฟล์นั้นและตรรกะที่เหลือจะยังคงเหมือนเดิม

ลองดูตัวอย่างต่อไปนี้ ที่นี่เรามีค่าฮาร์ดโค้ดสำหรับแสดงการใช้งานเท่านั้น ในการใช้งานจริงคุณจะอ่านค่าจากไฟล์หรือฐานข้อมูลเพื่อสร้างรายงานจริงและคุณอาจต้องเขียนรายงานขั้นสุดท้ายอีกครั้งลงในไฟล์

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

เมื่อดำเนินการสิ่งนี้จะให้ผลลัพธ์ดังต่อไปนี้ -

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

กำหนดส่วนหัวรายงาน

ทุกอย่างดูดี แต่คุณสนใจที่จะเพิ่มส่วนหัวในรายงานของคุณ ส่วนหัวนี้จะพิมพ์อยู่ด้านบนของแต่ละหน้า มันง่ายมากที่จะทำสิ่งนี้ นอกเหนือจากการกำหนดเทมเพลตคุณจะต้องกำหนดส่วนหัวและกำหนดให้กับตัวแปร $ ^ หรือ $ 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;
}

ตอนนี้รายงานของคุณจะมีลักษณะดังนี้ -

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

กำหนดเลขหน้า

แล้วถ้ารายงานของคุณใช้เวลามากกว่าหนึ่งหน้า? คุณมีทางออกสำหรับสิ่งนั้นเพียงแค่ใช้$% หรือ $ FORMAT_PAGE_NUMBER ที่สามารถแลกได้พร้อมกับส่วนหัวดังนี้ -

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

ตอนนี้ผลลัพธ์ของคุณจะมีลักษณะดังนี้ -

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

จำนวนบรรทัดบนหน้า

คุณสามารถกำหนดจำนวนบรรทัดต่อหน้าโดยใช้ตัวแปรพิเศษ $= (หรือ $ FORMAT_LINES_PER_PAGE) โดยค่าเริ่มต้น $ = จะเป็น 60

กำหนดส่วนท้ายรายงาน

แม้ว่า $ ^ หรือ $ FORMAT_TOP_NAME จะมีชื่อของรูปแบบส่วนหัวปัจจุบัน แต่ก็ไม่มีกลไกที่เกี่ยวข้องในการทำสิ่งเดียวกันโดยอัตโนมัติสำหรับส่วนท้าย หากคุณมีส่วนท้ายขนาดคงที่คุณสามารถรับส่วนท้ายได้โดยตรวจสอบตัวแปร $ - หรือ $ FORMAT_LINES_LEFT ก่อนการเขียนแต่ละครั้ง () และพิมพ์ส่วนท้ายด้วยตัวคุณเองหากจำเป็นโดยใช้รูปแบบอื่นที่กำหนดไว้ดังนี้ -

format EMPLOYEE_BOTTOM =
End of Page @<
            $%
.

สำหรับชุดตัวแปรทั้งหมดที่เกี่ยวข้องกับการจัดรูปแบบโปรดดูส่วนตัวแปรพิเศษของ Perl