Latest web development tutorials

Perl การส่งออกจัดรูปแบบ

Perl เป็นข้อมูลการประมวลผลภาษาข้อความที่มีประสิทธิภาพมาก

Perl สามารถใช้ในการกำหนดรูปแบบแม่แบบและจากนั้นใช้การส่งออกเขียนข้อมูลจากแม่แบบที่กำหนด

รูปแบบ Perl ไวยากรณ์ที่กำหนดไว้ดังต่อไปนี้:

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

การวิเคราะห์พารามิเตอร์:

  • FormatName: ชื่อรูปแบบ
  • fieldline: รูปแบบแถว, รูปแบบที่ใช้ในการกำหนดเส้นออกคล้ายกับ @ ^, <,>, | ตัวละครดังกล่าว
  • value_one, value_two ...... : แถวของข้อมูลที่ใช้ในการใส่ค่าในรูปแบบแถวหน้าทุกตัวแปร Perl
  • : สัญลักษณ์ End

ต่อไปนี้เป็นตัวอย่างง่ายๆคือการจัดรูปแบบ:

#!/usr/bin/perl

$text = "google w3big taobao";
format STDOUT =
first: ^<<<<<  # 左边对齐,字符长度为6
    $text
second: ^<<<<< # 左边对齐,字符长度为6
    $text
third: ^<<<< # 左边对齐,字符长度为5,taobao 最后一个 o 被截断
    $text  
.
write

ดำเนินการส่งออกตัวอย่างข้างต้นคือ

first: google
second: w3big
third: taoba

รูปแบบแถว (แถวกราฟิก) ไวยากรณ์

  • สายรูปแบบหรือ @ ^ ที่จุดเริ่มต้นเส้นเหล่านี้ไม่ได้รับรูปแบบของการแทนค่าตัวแปรใด ๆ
  • @ สนาม (เพื่อไม่ให้สับสนกับเครื่องหมายอาร์เรย์ @) เป็นฟิลด์สามัญ
  • @ <,>, ^ หลังจาก | ระยะเวลาเป็นตัวกำหนดความยาวของสนามถ้าตัวแปรเกินกว่าระยะเวลาที่กำหนดไว้ก็จะถูกตัดทอน
  • <,>, | ยังเป็นตัวแทนซ้ายชิดขวาชิดศูนย์ชิด
  • ^ ฟิลด์สำหรับหลายคู่สายบล็อกข้อความไส้

รูปแบบช่วง

ช่วงของรูปแบบดังต่อไปนี้:

รูป ความหมายหลากหลาย
@ <<< การส่งออกซ้าย
@ >>> การส่งออกขวาธรรม
@ ||| ตําแหน่งเอาท์พุท
@ ##. ## จำนวนคงที่แม่นยำ
@ * ข้อความหลายบรรทัด

ตัวอักษรตัวแรกของแต่ละบรรทัดเป็นช่วงของตัวละครฟิลเลอร์เมื่อใช้ @ ตัวอักษรไม่ได้จัดรูปแบบข้อความ

ในตารางข้างต้นนอกเหนือไปจากหลายคู่สาย @ * ช่วงกว้างฟิลด์จะเท่ากับจำนวนที่ระบุตัวอักษรในตัวละคร @ รวมทั้งตัวอย่างเช่น:

@###.##

เพราะมันหมายถึงเจ็ดตัวอักษรกว้างหลังจากที่สี่ก่อนจุดทศนิยมจุดทศนิยมสอง

ตัวอย่างมีดังนี้

#!/usr/bin/perl

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

select(STDOUT);
$~ = EMPLOYEE;

@n = ("Ali", "w3big", "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
===================================
===================================
w3big                  30
  2500.00
===================================
===================================
Jaffer                  40
  4000.00
===================================

รูปแบบตัวแปร

  • $ ~ ($ FORMAT_NAME): รูปแบบชื่อ $ ^ ($ FORMAT_TOP_NAME): ชื่อรูปแบบปัจจุบันจะถูกเก็บไว้ในส่วนหัว
  • $% ($ FORMAT_PAGE_NUMBER): จำนวนหน้าการส่งออกในปัจจุบัน
  • $ = ($ FORMAT_LINES_PER_PAGE): จำนวนเส้นบนหน้าเว็บ
  • $ | ($ FORMAT_AUTOFLUSH): ว่าจะล้างหน่วยความจำบัฟเฟอร์ส่งออกโดยอัตโนมัติ
  • $ ^ L ($ FORMAT_FORMFEED): ในทุกหน้า (ยกเว้นหน้าแรก) ส่วนหัวก่อนที่จะต้องสตริงเอาท์พุทจะถูกเก็บไว้ใน

ต่อไปนี้เป็นเรื่องง่ายที่จะใช้ $ เช่น - รูปแบบ:

#!/usr/bin/perl

$~ = "MYFORMAT"; # 指定缺省文件变量下所使用的格式
write;           # 输出 $~ 所指定的格式

format MYFORMAT = # 定义格式 MYFORMAT 
=================================
      Text # 本教程
=================================
.
write; 

ดำเนินการส่งออกตัวอย่างข้างต้นคือ

=================================
      Text # 本教程
=================================
=================================
      Text # 本教程
=================================

หากคุณไม่ได้ระบุ $ ~ ภายใต้กรณีที่รูปแบบการออกที่เรียกว่า STDOUT:

#!/usr/bin/perl

write;         # 不指定$~的情况下会寻找名为STDOUT的格式

format STDOUT =
~用~号指定的文字不会被输出
----------------
  STDOUT格式
----------------
.

ดำเนินการส่งออกตัวอย่างข้างต้นคือ

----------------
  STDOUT格式
----------------

ตัวอย่างต่อไปนี้เราจะเพิ่มข้อมูลส่วนหัวรายงานแสดงให้เห็นถึง $ ^ หรือ $ FORMAT_TOP_NAME ตัวแปร:

#!/usr/bin/perl

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

format EMPLOYEE_TOP =
===================================
Name                    Age
===================================
.

select(STDOUT);
$~ = EMPLOYEE;
$^ = EMPLOYEE_TOP;

@n = ("Ali", "w3big", "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
===================================
===================================
w3big                  30
  2500.00
===================================
===================================
Jaffer                  40
  4000.00
===================================

นอกจากนี้เรายังสามารถใช้ $% หรือ $ FORMAT_PAGE_NUMBER ชุดเลขสำหรับรายงาน:

#!/usr/bin/perl

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

# 添加分页 $% 
format EMPLOYEE_TOP =
===================================
Name                    Age Page @<
                                 $%
=================================== 
.

select(STDOUT);
$~ = EMPLOYEE;
$^ = EMPLOYEE_TOP;

@n = ("Ali", "w3big", "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 Page 1
===================================
===================================
Ali                     20
  2000.00
===================================
===================================
w3big                  30
  2500.00
===================================
===================================
Jaffer                  40
  4000.00
===================================

ส่งออกไปยังไฟล์อื่น

โดยค่าเริ่มต้นการทำงานจะเขียนผลไปยังไฟล์ที่ส่งออก STDOUT มาตรฐานเรายังสามารถทำให้มันออกผลลัพธ์ผลให้ไฟล์อื่น ๆ วิธีที่ง่ายที่สุดคือการยื่นตัวแปรเป็นพารามิเตอร์ที่จะเขียนเช่น:

write(MYFILE);

เขียนโค้ดข้างต้นเพื่อใช้ส่งออกรูปแบบการพิมพ์เริ่มต้นที่ไฟล์ที่เรียกว่า myfile myfile ใน

แต่นี้ไม่สามารถใช้ในการเปลี่ยนรูปแบบการพิมพ์ที่ใช้โดยตัวแปร $ ~ ตัวแปร $ ระบบ ~ ตัวแปรทำงานเฉพาะสำหรับแฟ้มเริ่มต้นเราสามารถเปลี่ยนค่าเริ่มต้นไฟล์ตัวแปร $ ~ การเปลี่ยนแปลงแล้วโทรเขียน

#!/usr/bin/perl

if (open(MYFILE, ">tmp")) {
$~ = "MYFORMAT";
write MYFILE; # 含文件变量的输出,此时会打印与变量同名的格式,即MYFILE。$~里指定的值被忽略。

format MYFILE = # 与文件变量同名 
=================================
      输入到文件中
=================================
.
close MYFILE;
}

หลังจากที่การดำเนินงานที่ประสบความสำเร็จเราสามารถดูเนื้อหาของแฟ้ม tmp ดังต่อไปนี้:

$ cat tmp 
=================================
      输入到文件中
=================================

เราสามารถใช้เลือกเพื่อเปลี่ยนตัวแปรแฟ้มเริ่มต้นซึ่งจะส่งกลับตัวแปรภายในปัจจุบันบ่งชี้ว่าแฟ้มเริ่มต้นเพื่อให้เราสามารถสร้างโปรแกรมย่อยตามการส่งออกความคิดของตัวเองโดยไม่ต้องมีผลกระทบต่อส่วนที่เหลือของโปรแกรม

#!/usr/bin/perl

if (open(MYFILE, ">>tmp")) {
select (MYFILE); # 使得默认文件变量的打印输出到MYFILE中
$~ = "OTHER";
write;           # 默认文件变量,打印到select指定的文件中,必使用$~指定的格式 OTHER

format OTHER =
=================================
  使用定义的格式输入到文件中
=================================
. 
close MYFILE;
}

หลังจากที่การดำเนินงานที่ประสบความสำเร็จเราสามารถดูเนื้อหาของแฟ้ม tmp ดังต่อไปนี้:

$ cat tmp 
=================================
      输入到文件中
=================================
=================================
  使用定义的格式输入到文件中
=================================