首页 > 编程语言 >无涯教程-Perl - 格式化

无涯教程-Perl - 格式化

时间:2023-08-03 18:38:39浏览次数:49  
标签:格式化 STDOUT 句柄 format FORMAT 无涯 Perl EMPLOYEE 格式

Perl使用称为“formats”的模板来输出内容。要使用Perl的格式函数,必须先定义一种格式,然后才能使用该格式写入格式化的数据。

定义格式

以下是定义Perl格式的语法-

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

这里的 FormatName 代表格式的名称。 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文件句柄相关联。但是,首先,我们必须使用select()函数确保STDOUT是我们选择的文件句柄。

select(STDOUT);

然后,通过使用特殊变量$〜或$FORMAT_NAME来设置STDOUT的新格式名称,将EMPLOYEE与STDOUT关联起来,如下所示-

$~="EMPLOYEE";

现在,当我们执行write时,数据将被发送到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包含当前页眉格式的名称,但是没有相应的机制可以自动为页脚执行相同的操作。如果您有固定大小的页脚,则可以通过在每个write之前检查变量$-或$FORMAT_LINES_LEFT来获取页脚,并在必要时使用定义如下的另一种格式自己打印页脚-

format EMPLOYEE_BOTTOM =
End of Page @<
            $%
.

有关与格式相关的完整变量集,请参阅Perl特殊变量部分。=">

参考链接

https://www.learnfk.com/perl/perl-formats.html

标签:格式化,STDOUT,句柄,format,FORMAT,无涯,Perl,EMPLOYEE,格式
From: https://blog.51cto.com/u_14033984/6951695

相关文章

  • Excel中Hyperlink函数的使用
    Hyperlink函数是将文本形式的链接转换为超链接。调用格式:=HYPERLINK(链接,标题)或者:=HYPERLINK(链接)具体可参考Hyperlink函数Microsoft官方文档视频演示:......
  • 无涯教程-Perl - 循环语句
    在某些情况下,您需要多次执行一个代码块。通常,语句是按顺序执行的:函数中的第一个语句首先执行,然后第二个执行,依此类推。Perl编程语言提供了以下类型的循环来处理循环需求。Sr.No.LoopType&描述1whileloop在给定条件为真时重复一个语句或一组语句。2untilloop重复......
  • 无涯教程-Perl - Arrays(数组)
    数组是一个变量,用于存储标量值的有序列表。数组变量前面有一个“@”符号。要引用数组的单个元素,将使用带符号名称的美元符号($),后跟方括号中的元素索引,这是使用数组变量的简单示例-#!/usr/bin/perl@ages=(25,30,40);@names=("JohnPaul","Lisa","Kumar");......
  • 无涯教程-Perl - 变量声明
    解释器根据变量的类型分配内存并确定可以保留内存中存储的内容。因此,通过为变量分配不同的数据类型,可以在这些变量中存储数字或字符串。创建变量Perl变量不必显式声明以保留内存空间。为变量分配值时,声明自动发生。等号(=)用于为变量分配值。请注意,如果在程序中使用usestric......
  • 无涯教程-Lua - if语句函数
    if语句由布尔表达式组成,后跟一个或多个语句。ifstatement-语法Lua编程语言中的if语句的语法是-if(boolean_expression)then--[statement(s)willexecuteifthebooleanexpressionistrue--]end如果布尔表达式的输出为true,则将执行if语句中的代码块。如果......
  • 无涯教程-Lua - nested语句函数
    Lua编程语言允许在另一个循环中使用一个循环。以下部分显示了一些示例来说明这一概念。nestedloops-语法Lua中嵌套for循环语句的语法如下-forinit,max/minvalue,incrementdoforinit,max/minvalue,incrementdostatement(s)endstatement(s)en......
  • 无涯教程-Lua - repeat...until 语句函数
    与for和while循环(它们在循环顶部测试循环条件)不同,Lua编程中的repeat...until循环语言在循环的底部检查其条件。repeat...until循环与while循环相似,不同之处在于,保证do...while循环至少执行一次。repeat...untilloop-语法Lua编程语言中repeat...until循......
  • 检测代码被格式化
       RegExp=functionRegExp(str){this.flag=false;debugger;if(str==`\\w+*\\(\\)*{\\w+*['|"].+['|"];?*}`){this.flag=true;}};RegExp.prototype.test=functiontest(str){......
  • 无涯教程-Lua - for语句函数
    for循环是一种重复控制结构,可让您有效地编写需要执行特定次数的循环。forloop-语法Lua编程语言中for循环的语法如下-forinit,max/minvalue,incrementdostatement(s)end这是for循环中的控制流程-首先执行init步骤,并且仅执行一次。此步骤使您可以声明和初......
  • 无涯教程-Lua - while语句函数
    只要给定条件为真,Lua编程语言中的while循环语句就会重复执行目标语句。whileloop-语法Lua编程语言中while循环的语法如下-while(condition)dostatement(s)endwhileloop-流程图在这里,需要注意的关键是while循环可能根本不执行。当测试条件并且输出为false......