人人可用的 Rexx
2008-11-10 08:28:32 来源:WEB开发网Rexx 的文本处理函数的一个令人喜爱的特性是,它可以自然地处理以空格隔开的 词 组成的行。对文本的报表和日志文件来说,轻松忽略掉没用的空格是非常有必要的 —— ‘awk’有类似的功能,但是 Python 的 string.split() 在描述同样的操作时更“繁杂”。实际上,在 Rexx 中“数组”就是由空格隔开的字符串。 PULL 指令将以一个通用的模板模式从一行中得到变量,并支持最小程度的词拆分:
清单 13. pushpull.rexx
#!/usr/bin/rexx
PUSH "a b c d e f"
PULL x y " C " z /* pull x and y before the C, remainder into z */
SAY x # y # z /* --> A # B # D E F */
可以对那些可能是或者不是通过模板得到的字符串进行进一步完美的拆分。 wordpos() 、 word() 、 wordindex() 或者 words() 、 subword() 这些函数让您可以访问字符串中的“词”,就像是它们构成一个列表一样,举例来说:
清单 14. 处理字符串中的词
seuss = "The cat in the hat came back"
thehat = wordpos('the hat', seuss)
SAY "'came'" is wordlength(seuss, thehat+2) letters long
/* --> 'came' IS 4 LETTERS LONG */
当然,您也可以得到足够的面向字符的函数集。可以同样容易地使用 reverse() 、 right() 、 justify() 、 center() 、 pos() 或者 substr() (还有其他的)函数来处理字符位置。
使用另外一些内置的函数,您可以以一种灵活的、面向报表的方法处理日期和数字。更确切地说,可以以各种格式对任意(可配置)精度的数字进行读和写。类似的,使用标准函数调用可以对日期进行读写和各种格式间的转换(例如,一周中的第几天、一个世纪中的第几天、欧洲时间相对于美国时间,等等)。处理日期和数字的灵活性,在编写系统脚本和处理日志文件时,其必要性可能比不上处理来自数据库应用的半结构化输出报表。但是当您需要这个功能时,使用充分测试过的内置函数要比编写您自己的特制的转换器和格式化工具要稳妥得多。
结束语
由于来自 IBM “大型机”环境比重多于 Unix 系统,Rexx 对很多 Linux 程序员和系统管理员是鲜为人知的。但是在 Linux 中仍然有一个重要的领域,在这里,相对于“过轻量级”的 bash 或 ksh shell,或者“过重量级”的解释性编程语言例如 Python、Perl、Ruby、TCL,或者可能还有 Scheme,Rexx 是更好的脚本解决方案。作为可以快速且简单易读的脚本,在对外部进程的输入和输出进行文本处理方面,Rexx 无懈可击,而且学习和安装也不困难。
更多精彩
赞助商链接