在使用ruby脚本时, 经常需要用到在参数中给出文件名,然后再脚本中可以处理该文件的功能,或者说从STDIN获取输入,然后处理得到某个结果。 而ruby为开发者处理类似的问题提供了一个很好的解决方法 --- ARGF
“ARGF is a stream designed for use in scripts that process files given as command-line arguments or passed in via STDIN.”
[size=medium][b]ARGF[/b][/size]
上面就是根据参数,找到文件,打印出文件内容所需的全部代码。
[img]http://dl2.iteye.com/upload/attachment/0091/4596/bb604d2e-5479-323a-b52c-62810607a219.png[/img]
该脚本甚至可以接受多个文件名参数,按顺序一个一个的处理文件。
另外,该代码还有一个附赠的语法糖,如果没有给参数,则默认等待STDIN的输入,效果如下:
[img]http://dl2.iteye.com/upload/attachment/0091/4598/b5e5ab09-69dd-3b73-8160-e0a80f834041.png[/img]
[size=medium][b]ARGV[/b][/size]
在运行ruby脚本的时候,所有的参数会以Array的形式保存到ARGV中。ARGF则会根据ARGV中的值一个一个的处理,每处理一个就从ARGV中移除一个,直到处理完所有的值。
[img]http://dl2.iteye.com/upload/attachment/0091/4602/dd56eb91-8363-302e-a1d1-c9ebb78c048c.png[/img]
有了这层理解,就可以很容易的为脚本加一些option,然后从ARGV中取出,根据option去做特殊的处理。
“ARGF is a stream designed for use in scripts that process files given as command-line arguments or passed in via STDIN.”
[size=medium][b]ARGF[/b][/size]
ARGF.each { |line|
puts line
}
上面就是根据参数,找到文件,打印出文件内容所需的全部代码。
[img]http://dl2.iteye.com/upload/attachment/0091/4596/bb604d2e-5479-323a-b52c-62810607a219.png[/img]
该脚本甚至可以接受多个文件名参数,按顺序一个一个的处理文件。
另外,该代码还有一个附赠的语法糖,如果没有给参数,则默认等待STDIN的输入,效果如下:
[img]http://dl2.iteye.com/upload/attachment/0091/4598/b5e5ab09-69dd-3b73-8160-e0a80f834041.png[/img]
[size=medium][b]ARGV[/b][/size]
在运行ruby脚本的时候,所有的参数会以Array的形式保存到ARGV中。ARGF则会根据ARGV中的值一个一个的处理,每处理一个就从ARGV中移除一个,直到处理完所有的值。
puts ARGV.inspect
ARGF.each { |line|
puts line
puts ARGV.inspect
}
[img]http://dl2.iteye.com/upload/attachment/0091/4602/dd56eb91-8363-302e-a1d1-c9ebb78c048c.png[/img]
有了这层理解,就可以很容易的为脚本加一些option,然后从ARGV中取出,根据option去做特殊的处理。