perl有最好的文本数据处理能力.这是大家都知道的.在perl本身有一个别的软件没有的小功能,就是Perl格式.它相当于简单的命令行报表和图表输出.这个需要先声明格式.创建格式的文件句柄.然后由@,^,,|这样的字符构成所谓的”报表”来输出图表.这样可以指定出行的外观.后面接数据项,最后用write来显示格式化的内容.

样例:

输出纪录格式输出象下边一样定义:

format NAME =

FORMLIST

.

第一部分,声明.如上.如果省略 NAME,上面的代码将定义格式输出 STDOUT。

第二部分,格式行FORMLIST 由一些有序的行组成,每一行都是下面三种类型中的一种:

1. 注释,以第一列为 # 来表示.

2. 一个格式行,用来定义一个输出行的格式,就是指上面讲的@,^,,|这样的字符

3. 参数行,数据行,用来向前面的格式行中插入值,都是perl的变量

第三部分, 结束 “.”来表示.

格式行(图形行)语法:格式行中每个被替换的部分分别以 @ 或者 ^ 开头。这些行不作任何形式的变量代换。

@  字段(不要同数组符号 @ 相混淆)是普通的字段。

,|     字段的长度通过在格式符号 @,^ 后跟随特定长度的 ,| 来定义,同时,| 还分别表示,左对齐,右对齐,居中对齐。如果变量超出定义的长度,那么它将被截断。

^ 字段,用来进行多行文本块填充。

$text = "aaa bbb ccc ";

format STDOUT =

first: ^<<<<

$text

second: ^<<<<

$text

third: ^<<<<

$text

.

write

这样它会输出如下:

first: aaa

second: bbb

third: ccc

它默认会对字符串$text进行分解,象split.当然,是以$:存的内容做分割符.

#(在 @ 或 ^ 后边)   右对齐的另外一种方式,在这些符号后面指定一个数字字段。你可以在这种区域中插入一个 . 来制定小数点的位置。如果这些区域的值包含一个换行符,那么只输出换行符前面的文本。如@.##就是输出二位小数.

@*        可以被用来打印多行不截断的值,也就是多行没有格式化的输出.

参数行(数据行)参数行指定参数的顺序必须跟相应的格式行的字段顺序一致。不同参数的表达式需要使用逗号分隔。

参数的数据可以是标量数据,也可以是函数的返回值.

参数行被处理之前所有的参数表达式都在列表环境中求值,因此单个列表表达式会产生多个列表元素。

通过使用圆括弧将表达式括起来,可以使表达式扩展到多行 (因此,圆括弧必须是第一行的第一个标志)。这样就可以将值同相应的格式域对应起来方便阅读。

表达式中,空白字符 \n,\t,和 \f 总是被解释成单个空格

格式变量

$~ 中 ($FORMAT_NAME)          格式名字

$^ ($FORMAT_TOP_NAME)         当前的表头格式名字存储在

$% ($FORMAT_PAGE_NUMBER)      当前输出的页号

$= ($FORMAT_LINES_PER_PAGE)   每页中的行数

$| ($FORMAT_AUTOFLUSH)      是否自动刷新输出缓冲区存储

$^L ($FORMAT_FORMFEED)       在每一页(除了第一页)表头之前需要输出的字符串存储在

注:这些变量以文件句柄为基础设定,因此你需要 select 与特定格式关联的文件句柄来影响这些格式变量

调用输出write

最后直接用write函数来显示格式化的文本内容.

多页报表

$%  当前输出的页面编号

$=  页中的行数

$-  还有多少剩下的行数

在使用输出时,最好建一个表的顶部输出.这样看起来会好看很多.

实例代码:

#!/usr/bin/perl

use strict;

use warnings;

my ($name,$login,$office,$uid,$gid, $home);

open FD,"

while(){

($name,$login,$office,$uid,$gid, $home) = split (":",$_);

$^ = 'STDOUT_TOP';

$~ = 'STDOUT';

$= = 39;

write;

}

format STDOUT_TOP =

@>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

"Page $%"

Passwd File

Name                Login    Office   Uid   Gid Home

------------------------------------------------------------------

.

format STDOUT =

@<<<<<<<<<<<<<<<<<< @||||||| @<<<<<>>> @>>>> @<<<<<<<<<<<<<<<<<

$name,               $login,  $office,$uid,$gid, $home

.

输出如下

Page 3

Passwd File

Name                Login    Office   Uid   Gid Home

--------------------------------------------------------------------

sshd                   x     115    65534       /var/run/sshd

vde2-net               x     116      128       /var/run/vde2

mysql                  x     117      129 MySQL /var/lib/mysql

oracle                 x     1001    1001       /usr/lib/oracle/xe

tomcat6                x     118      130       /usr/share/tomcat6

oracle 格式化报表输出,perl的格式化(Format)报表输出实现代码相关推荐

  1. python基础_格式化输出(%用法和format用法)(转载)

    python基础_格式化输出(%用法和format用法) 目录 %用法 format用法 %用法 1.整数的输出 %o -- oct 八进制 %d -- dec 十进制 %x -- hex 十六进制 ...

  2. python基础_格式化输出(%用法和format用法)

    %用法 1.整数的输出 %o -- oct 八进制 %d -- dec 十进制 %x -- hex 十六进制 >>> print('%o' % 20) 24 >>> ...

  3. python123格式化输出_python 字符串格式化输出 %d,%s及 format函数

    旧式格式化方式:%s,%d 1.顺序填入格式化内容 s = "hello %s, hello %d"%("world", 100) print(s) 结果: ' ...

  4. oracle显示linesize,SQL Plus输出结果的格式化(linesize、pagesize)

    描述:SQL Plus可以执行数据库的一些操作,就像使用其他数据库工具一样,但是SQL Plus有一个缺点就是输出结果的格式化不尽人意. 直接进入正题吧.按键 Win+r键,输入 sqlplus 或者 ...

  5. Rust格式化输出:println、format格式化参数详解

    文章目录 基本姿势 打印2/8/16进制 打印内存地址(指针或引用) 科学计数 使用参数索引和命名参数 padding和对齐 相关的宏 参考标准库文档 Rust的format!.println!宏实现 ...

  6. ebs 选择excel输出 后缀 html,Oracle EBS XML报表中数字的处理(Excel输出)

    不知大家是否遇到这样一个情况,报表中输出数字过大或者以"0"字符开头的时候(仅指在Excel输出中),会以科学计数法的形式显示或者省略0的形式显示,显然这样的效果不是客户想要的结果 ...

  7. 萌新的Python练习菜鸟100例(十)暂停一秒输出,并格式化输出当前时间

    题目: 题目:暂停一秒输出,并格式化当前时间 分析: 主要是练习输出本机时间 · 使用Python time模块 · 再使用time.sleep()函数,时间为秒,可以自由设置 · 格式化输出当前时间 ...

  8. oracle2周后日期,ORACLE日期时间及数字的格式化参数大全

    SSSSS 返回自午夜到指定时间共逝去的秒数(范围:0-86399) 例如: SQL> select to_char(sysdate,¨sssss¨) from dual; TO_CHAR(SY ...

  9. python格式化输出复数_格式化复数

    您可以使用str.format()方法执行如下所示的操作:>>> n = 3.4+2.3j >>> n (3.4+2.3j) >>> '({0.r ...

最新文章

  1. AIX 操作系统日常维护须知
  2. java 时间的封装类
  3. Xcode代码不提示或提示慢
  4. 皮一皮:晚上千万千万别乱拍照...
  5. Eclipse 部分快捷键
  6. 科普丨营销人,还不知道行为触发的话你就 OUT 了!
  7. FTP 服务器Serv-U:Permission denied解决
  8. 设计模式学习笔记——装饰(Decorator)模式
  9. 2022年Spark基础学习笔记目录
  10. 2017.6.12 crash的数字表格 思考记录
  11. Spring-beans-FactoryBean
  12. lock.lock()使用,与synchronized对比
  13. 【系统分析师之路】如何备考系统分析师与架构师(软件水平考试)
  14. 步进电机正反转实验_三相异步电机正反转控制原理图
  15. 京东VC后台自动批量上传主图 大聪明自动传主图 c# selenium网页自动化传图
  16. git命令判断当前分支是否与master合并
  17. 万向区块链行业研究:区块链技术在绿色金融领域的应用分析
  18. USB无法debug调试:because an app is obscuring a permission request settings cab't verify your resonse
  19. 转载——神经网络中mAP相关概念
  20. 虚拟机Ubuntu18.04开机后没有网络的解决办法

热门文章

  1. android中设置Animation 动画效果
  2. 微信公众帐号开发教程第6篇-消息及消息处理工具的封装
  3. android分享软件功能的实现
  4. Hadoop 统计单词字数的例子
  5. .NET简谈组件程序设计之(手动同步)
  6. 权限组件(4):给动态菜单增加面包屑导航
  7. python中 __name__及__main()__的妙处
  8. 提升购物体验,跨境电商如何做企业管理?
  9. MySQL性能优化的最佳21条经验
  10. java并发编程与线程安全