中国IT动力,最新最全的IT技术教程
最新100篇 | 推荐100篇 | 专题100篇 | 排行榜 | 搜索 | 在线API文档 | 网通镜像
首 页 | 程序开发 | 操作系统 | 软件应用 | 图形图象 | 网络应用 | 精文荟萃 | 教育认证 | 硬件维护 | 未整理篇 | 站长教程
ASP JS PHP工程 ASP.NET 网站建设 UML J2EESUN .NET VC VB VFP 网络维护 数据库 DB2 SQL2000 Oracle Mysql
服务器 Win2000 Office C DreamWeaver FireWorks Flash PhotoShop 上网宝典 CorelDraw 协议大全 网络安全 微软认证
硬件维护  CPU  主板  硬盘  内存  显卡  显示器  键盘鼠标  声卡音箱  打印机  机箱电源  BIOS  网卡  C#  Java  Delphi  vs.net2005
  当前位置:> 程序开发 > 编程语言 > 综合其它
迈出第一步-grep(1)
作者:佚名 时间:2007-09-24 16:18 出处:Ruby中文社区 责编:月夜寒箫
              摘要:迈出第一步-grep(1)

以Ruby为代表的脚本语言常被用来进行文本处理。为了能对她有个感性认识,我们先给出第一道例题教您使用“grep”命令,其功能就是从文本中找出符合正则表达式的行。

grep命令用法如下:

grep pattern file...

省略文件名时则从标准输入搜索合适的行。

若用Ruby(简单地)改写的话,就像下面这样:

            

$pat = ARGV.shift

while gets

print if /#{$pat}/

end

虽然只有4行,但却是很不错的程序。Ruby是解释型语言,所以不需要编译马上就能执行您写的程序。Ruby从一开始就添加了各种各样的便利的功能,如读取参数指定的文件以及使用正则表达式进行检索等,使编程变得“简便快捷”。

假如用C语言重写这段程序的话,即使去掉正则表达式部分也会相当长。若非编程高手则将花费不少的时间。这种“简易性”正是Ruby的长处之一。

下面就来运行一下吧!

            

ruby grep0.rb ruby /usr/dict/words

ruby

效果不错(太好了,太好了)。

为了对Ruby有所了解,我们仔细看看这段程序。

像grep那样读取文件并逐行处理然后输出结果的程序基本上由下列部分构成:

while 读入一行

处理读入的行

输入处理结果(若有的话)

end

Ruby从一开始就包含这些功能。例如,“读入一行”可以使用gets函数,输出结果可以使用print函数。

前面的程序也遵循这种形式,让我们仔细研究一下。

1  $pat = ARGV.shift

2  while gets

3     print if /#{$pat}/

4  end

第1行从命令行参数中取出比较模型(pattern),然后赋值给变量$pat。Ruby的命令行参数都保存在数组ARGV中,所以取出数组的第一个元素。ARGV.shift表示去掉数组第一个要素。

第2行的“while gets”几乎是一种固定用法,表示一行一行地读取数组ARGV中命令行参数指定的文件。若ARGV中包含不止一个文件名时,则从最初的文件开始依次读取每一个文件。

第3行表示,若出现符合pattern的行就print。/#{$pat}/表示将读入的行与$pat所代表的正则表达式进行比较。‘#{$pat}’表示把‘#{’到‘}’之间的表达式置入正则表达式(/.../)中。这种置入表达式的方法在字符串或正则表达式中都有效。

第4行的“end”与第2行的“while”呼应,表示由while开始的循环到此为止。

您是不是明白了呢?程序虽短,却有些难懂吧!实际上,Ruby允许您使用各种简写形式以确保程序更容易书写。因此,程序虽然变短了却也变得更加难懂了,不过这也是没有办法的事。下面,我们就把省略的部分补上,再把程序重写一遍。

1  $pat = ARGV.shift

2  while $_ = gets()

3     if $_ =~ /#{$pat}/ then print $_ end

4  end

好像并没有好懂多少嘛!但是刚才被省略掉的变量“$_”浮出水面后,程序的运行原理好像变得容易理解了。那么,我们再次详细地说明一下。

第1行还是一样。

第2行的gets很明显是函数。gets读取一行后赋值给变量$_。若到达文件尾部时返回false,则while循环结束。

关闭本页
 
首页 | 投资与合作 | 服务条款 | 隐私政策 | 收藏本站 | 设为首页 | 新用户注册 | 免责声明 | 使用帮助
Copyright ©2005-2008 chinaitpower.com All rights reserved. www.chinaitpower.com 版权所有