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