- 921. Minimum Add to Make Parentheses Valid 使括号有效的最少添加
- 915. Partition Array into Disjoint Intervals 分割数组
- 932. Beautiful Array 漂亮数组
- 940. Distinct Subsequences II 不同的子序列 II
Perl 最具特殊的功能之一就是它的文本数据处理能力
Perl 中可以使用 format 来定义一个模板,然后使用 write 按指定模板输出数据
format FormatName =
fieldline
value_one, value_two, value_three
fieldline
value_one, value_two
.
FormatName
格式化名称
fieldline
一个格式行,用来定义一个输出行的格式,类似 @,^,,| 这样的字符
value_one,value_two……
数据行,用来向前面的格式行中插入值,都是perl的变量
点号(.)
结束符号
下面是一个简单的 Perl format 使用范例:
#!/usr/bin/perl
=pod
file: mail.pl
author: DDKK.COM 弟弟快看,程序员编程资料站(www.ddkk.com)
Copyright © 2015-2065 www.ddkk.com. All rights reserved.
=cut
$text = "google ddkk taobao qq this is what";
format STDOUT =
first: ^<<<<< # 左边对齐,字符长度为6
$text
second: ^<<<<< # 左边对齐,字符长度为6
$text
third: ^<<<< # 左边对齐,字符长度为5,taobao 最后一个 o 被截断到下一行
$text
four: ^<<<<<<<<<<<< # 左对齐,字符长度为13
$text
.
write
执行以上范例输出结果为:
$ perl main.pl
first: google # 左边对齐,字符长度为6
second: ddkk # 左边对齐,字符长度为6
third: taoba # 左边对齐,字符长度为5,taobao 最后一个 o 被截断到下一行
four: o qq this is # 左对齐,字符长度为13
<, >
,| 长度决定了字段的长度,如果变量超出定义的长度,那么它将被截断<, >
,| 还分别表示,左对齐,右对齐,居中对齐格式 | 值域含义 |
---|---|
@<<< | 左对齐输出 |
@>>> | 右对齐输出 |
@||| | 中对齐输出 |
@##.## | 固定精度数字 |
@* | 多行文本 |
每个值域的第一个字符是行填充符,当使用 @ 字符时,不做文本格式化
在上表中,除了多行值域 @*,域宽都等于其指定的包含字符 @ 在内的字符个数,
例如:
@###.##
表示7 个字符宽,小数点前 4 个,小数点后 2 个
范例如下:
#!/usr/bin/perl
=pod
file: mail.pl
author: DDKK.COM 弟弟快看,程序员编程资料站(www.ddkk.com)
Copyright © 2015-2065 www.ddkk.com. All rights reserved.
=cut
format EMPLOYEE =
===================================
@<<<<<<<<<<<<<<<<<<<<<< @<< @#####.##
$name $age $salary
===================================
.
select(STDOUT);
$~ = EMPLOYEE;
@n = ("QQ", "ddkk", "baidu");
@a = (20,30, 40);
@s = (2000.00, 2500.00, 4000.000);
$i = 0;
foreach (@n){
$name = $_;
$age = $a[$i];
$salary = $s[$i++];
write;
}
以上范例输出结果为:
$ perl main.pl
Use of comma-less variable list is deprecated at main.pl line 17.
Use of comma-less variable list is deprecated at main.pl line 17.
===================================
QQ 20 2000.00
===================================
===================================
ddkk 30 2500.00
===================================
===================================
baidu 40 4000.00
===================================
** $
~ ( $
FORMAT_NAME)**
格式名字
** $
^ ( $
FORMAT_TOP_NAME)
当前的表头格式名字存储在
** $
% ( $
FORMAT_PAGE_NUMBER)
当前输出的页号
** $
= ( $
FORMAT_LINES_PER_PAGE)
每页中的行数
** $
| ( $
FORMAT_AUTOFLUSH)
是否自动刷新输出缓冲区存储
** $
^L ( $
FORMAT_FORMFEED)
在每一页(除了第一页)表头之前需要输出的字符串存储在
下面的范例演示了 $
~ 格式化的使用
#!/usr/bin/perl
=pod
file: mail.pl
author: DDKK.COM 弟弟快看,程序员编程资料站(www.ddkk.com)
Copyright © 2015-2065 www.ddkk.com. All rights reserved.
=cut
$~ = "MYFORMAT"; # 指定缺省文件变量下所使用的格式
write; # 输出 $~ 所指定的格式
format MYFORMAT = # 定义格式 MYFORMAT
=================================
Text # DDKK.COM 弟弟快看,程序员编程资料站
=================================
.
write;
运行以上范例,输出结果如下:
$ perl main.pl
=================================
Text # DDKK.COM 弟弟快看,程序员编程资料站
=================================
=================================
Text # DDKK.COM 弟弟快看,程序员编程资料站
=================================
不指定 $
~ 的情况下,会输出名为 STDOUT 的格式:
#!/usr/bin/perl
=pod
file: mail.pl
author: DDKK.COM 弟弟快看,程序员编程资料站(www.ddkk.com)
Copyright © 2015-2065 www.ddkk.com. All rights reserved.
=cut
write; # 不指定$~的情况下会寻找名为STDOUT的格式
format STDOUT =
~用~号指定的文字不会被输出
----------------
STDOUT格式
----------------
.
运行以上范例,输出结果如下:
$ perl main.pl
----------------
STDOUT格式
----------------
#!/usr/bin/perl
=pod
file: mail.pl
author: DDKK.COM 弟弟快看,程序员编程资料站(www.ddkk.com)
Copyright © 2015-2065 www.ddkk.com. All rights reserved.
=cut
format EMPLOYEE =
===================================
@<<<<<<<<<<<<<<<<<<<<<< @<<
$name $age
@#####.##
$salary
===================================
.
format EMPLOYEE_TOP =
===================================
Name Age
===================================
.
select(STDOUT);
$~ = EMPLOYEE;
$^ = EMPLOYEE_TOP;
@n = ("Ali", "baidu", "Jaffer");
@a = (20,30, 40);
@s = (2000.00, 2500.00, 4000.000);
$i = 0;
foreach (@n){
$name = $_;
$age = $a[$i];
$salary = $s[$i++];
write;
}
运行以上范例,输出结果如下:
$ perl main.pl
Use of comma-less variable list is deprecated at main.pl line 16.
===================================
Name Age
===================================
===================================
Ali 20
2000.00
===================================
===================================
baidu 30
2500.00
===================================
===================================
Jaffer 40
4000.00
===================================
$
% 或 $
FORMAT_PAGE_NUMBER 为报表设置分页#!/usr/bin/perl
=pod
file: mail.pl
author: DDKK.COM 弟弟快看,程序员编程资料站(www.ddkk.com)
Copyright © 2015-2065 www.ddkk.com. All rights reserved.
=cut
format EMPLOYEE =
===================================
@<<<<<<<<<<<<<<<<<<<<<< @<<
$name $age
@#####.##
$salary
===================================
.
# 添加分页 $%
format EMPLOYEE_TOP =
===================================
Name Age Page @<
$%
===================================
.
select(STDOUT);
$~ = EMPLOYEE;
$^ = EMPLOYEE_TOP;
@n = ("Ali", "Baidu", "Jaffer");
@a = (20,30, 40);
@s = (2000.00, 2500.00, 4000.000);
$i = 0;
foreach (@n){
$name = $_;
$age = $a[$i];
$salary = $s[$i++];
write;
}
运行以上范例,输出结果如下:
$ perl main.pl
Use of comma-less variable list is deprecated at main.pl line 17.
===================================
Name Age Page 1
===================================
===================================
Ali 20
2000.00
===================================
===================================
Baidu 30
2500.00
===================================
===================================
Jaffer 40
4000.00
===================================
默认情况下函数 write 将结果输出到标准输出 STDOUT。
write 函数也可以将结果输出到任意其它的文件中。 最简单的方法就是把文件变量作为参数传递给 write 函数
write(MYFILE);
上面的代码,write 函数使用缺省的格式输出到文件 MYFILE 文件中 但这样就不能用 $
~ 变量来改变所使用的打印格式。
系统变量 $
~ 只对默认文件变量起作用 我们可以改变默认文件变量,改变 $
~,再调用 write
#!/usr/bin/perl
=pod
file: mail.pl
author: DDKK.COM 弟弟快看,程序员编程资料站(www.ddkk.com)
Copyright © 2015-2065 www.ddkk.com. All rights reserved.
=cut
if (open(MYFILE, ">tmp") ) {
$~ = "MYFORMAT";
write MYFILE; # 含文件变量的输出,此时会打印与变量同名的格式,即 MYFILE
# $~ 里指定的值被忽略
format MYFILE = # 与文件变量同名
=================================
输入到文件中
=================================
.
close MYFILE;
}
运行范例后,我们可以查看 tmp 文件的内容,显示如下:
$ perl main.pl && cat tmp
=================================
输入到文件中
=================================
可以使用 select 改变默认文件变量时,它返回当前默认文件变量的内部表示,这样我们就可以创建一个函数,按自己的想法输出,又不影响程序的其它部分
#!/usr/bin/perl
=pod
file: mail.pl
author: DDKK.COM 弟弟快看,程序员编程资料站(www.ddkk.com)
Copyright © 2015-2065 www.ddkk.com. All rights reserved.
=cut
if (open(MYFILE, ">>tmp"))
{
select (MYFILE); # 使得默认文件变量的打印输出到MYFILE中
$~ = "OTHER";
write; # 默认文件变量,打印到select指定的文件中,必使用$~指定的格式 OTHER
format OTHER =
+------------------------------+
+ 使用定义的格式输入到文件中 +
+------------------------------+
.
close MYFILE;
}
运行范例成功后,我们可以查看 tmp 文件的内容,显示如下所示:
$ perl main.pl && cat tmp
=================================
输入到文件中
=================================
+------------------------------+
+ 使用定义的格式输入到文件中 +
+------------------------------+
我正在使用 OUTFILE 命令,但由于权限问题和安全风险,我想将 shell 的输出转储到文件中,但出现了一些错误。我试过的 #This is a simple shell to connect t
我刚刚开始学习 Java,我想克服在尝试为这个“问题”创建 Java 程序时出现的障碍。这是我必须创建一个程序来解决的问题: Tandy 喜欢分发糖果,但只有 n 颗糖果。对于她给第 i 个糖果的人,
你好,我想知道我是否可以得到一些帮助来解决我在 C++ 中打印出 vector 内容的问题 我试图以特定顺序在一个或两个函数调用中输出一个类的所有变量。但是我在遍历 vector 时收到一个奇怪的错误
我正在将 intellij (2019.1.1) 用于 java gradle (5.4.1) 项目,并使用 lombok (1.18.6) 来自动生成代码。 Intellij 将生成的源放在 out
编辑:在与 guest271314 交流后,我意识到问题的措辞(在我的问题正文中)可能具有误导性。我保留了旧版本并更好地改写了新版本 背景: 从远程服务器获取 JSON 时,响应 header 包含一
我的问题可能有点令人困惑。我遇到的问题是我正在使用来自 Java 的 StoredProcedureCall 调用过程,例如: StoredProcedureCall call = new Store
在我使用的一些IDL中,我注意到在方法中标记返回值有2个约定-[in, out]和[out, retval]。 当存在多个返回值时,似乎使用了[in, out],例如: HRESULT MyMetho
当我查看 gar -h 的帮助输出时,它告诉我: [...] gar: supported targets: elf64-x86-64 elf32-i386 a.out-i386-linux [...
我想循环遍历一个列表,并以 HTML 格式打印其中的一部分,以代码格式打印其中的一部分。所以更准确地说:我想产生与这相同的输出 1 is a great number 2 is a great
我有下面的tekton管道,并尝试在Google Cloud上运行。集群角色绑定。集群角色。该服务帐户具有以下权限。。例外。不确定需要为服务帐户设置什么权限。
当尝试从 make 过滤非常长的输出以获取特定警告或错误消息时,第一个想法是这样的: $ make | grep -i 'warning: someone set up us the bomb' 然而
我正在创建一个抽象工具类,该类对另一组外部类(不受我控制)进行操作。外部类在某些接口(interface)点概念上相似,但访问它们相似属性的语法不同。它们还具有不同的语法来应用工具操作的结果。我创建了
这个问题已经有答案了: What do numbers starting with 0 mean in python? (9 个回答) 已关闭 7 年前。 在我的代码中使用按位与运算符 (&) 时,我
我写了这段代码来解析输入文件中的行输入格式:电影 ID 可以有多个条目,所以我们应该计算平均值输出:**没有重复(这是问题所在) import re f = open("ratings2.txt",
我需要处理超过 1000 万个光谱数据集。数据结构如下:大约有 1000 个 .fits(.fits 是某种数据存储格式)文件,每个文件包含大约 600-1000 个光谱,其中每个光谱中有大约 450
我编写了一个简单的 C 程序,它读取一个文件并生成一个包含每个单词及其出现频率的表格。 该程序有效,我已经能够在 Linux 上运行的终端中获得显示的输出,但是,我不确定如何获得生成的显示以生成包含词
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
1.普通的输出: print(str)#str是任意一个字符串,数字··· 2.格式化输出: ?
我无法让 logstash 正常工作。 Basic logstash Example作品。但后来我与 Advanced Pipeline Example 作斗争.也许这也可能是 Elasticsear
这是我想要做的: 我想让用户给我的程序一些声音数据(通过麦克风输入),然后保持 250 毫秒,然后通过扬声器输出。 我已经使用 Java Sound API 做到了这一点。问题是它有点慢。从发出声音到
我是一名优秀的程序员,十分优秀!