在终端中运行带有输入文件的Ruby文件?
问题描述:
我愿做这样的事情在终端在终端中运行带有输入文件的Ruby文件?
$ ruby quicksort.rb unsorted.txt
quicksort.rb
是Ruby文件我想运行unsorted.txt
是包含未分类的数字输入文件。是否有可能在Ruby中做这样的事情?
谢谢。
答
您可以阅读命令行参数并执行文件操作。读取您可以使用的参数
ARGV.each do|a|
puts "Argument: #{a}"
end
这样您就可以获取文件名并获取内容。
答
ARGF
使得这种任务容易,几乎Perl的<>
操作一样简单:
$ cat quicksort.rb
#!/usr/bin/ruby
ARGF.each do |line|
puts line
end
$ ruby quicksort.rb /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
...
答
对于参数,使用的argv
ARGV.each do|file|
file
end
然后你就可以读取文件的内容:
f = File.open(file, File::RDONLY)
答
虽然我喜欢在Ruby中解决的东西,我只是想指出:
> sort unsorted.txt > sorted.txt
如果你有一个像样的(* nix)命令行。但也许你想做的不仅仅是排序?
答
在标准刚看完,外壳可以很容易地为你做这个:
#!/usr/bin/env ruby
puts $stdin.read.reverse
然后使用“<”转发包含“foobar”如果你的程序跳回到bar.txt文件的内容。
$ ruby foo.rb < bar.txt
raboof
另一种解决方案,更多的你想要做什么比赛将是:
#!/usr/bin/env ruby
puts IO.read(ARGV[0]).reverse
运行它:
$ ruby foo.rb bar.txt
raboof