我有类似Ruby代码:写输出到文件
ok.rb
hasil = "input operator salah"
puts hasil
exec("sort ok.rb > output.txt") if fork.nil?
它只是写的所有代码到output.txt
。但是,我只想要hasil
结果写入output.txt
。我应该如何修改代码以达到这样的最终结果?
我有类似Ruby代码:写输出到文件
ok.rb
hasil = "input operator salah"
puts hasil
exec("sort ok.rb > output.txt") if fork.nil?
它只是写的所有代码到output.txt
。但是,我只想要hasil
结果写入output.txt
。我应该如何修改代码以达到这样的最终结果?
您已执行sort
命令,将ok.rb
作为输入。相反,您要运行ok.rb
并将其输出作为输入进行排序。
不知道红宝石,我希望这是这样的:
exec("ruby ok.rb | sort > output.txt") if fork.nil?
我只是尝试这样从我的Linux桌面,它工作得很好:
ok.rb:
hasil = "input operator salah"
puts hasil
other.rb:
exec("ruby ok.rb | sort > output.txt") if fork.nil?
执行:
$ ruby other.rb
$ cat output.txt
input operator salah
(所以不完全是大量的排序你仅供输出的单行。)
最彻底的方法是改变上面的代码中不产生直接输出到标准输出,而是只生成字符串,然后从ruby中排序并将其打印到文件中。像这样的例子:
hasil = "input operator salah"
File.open("output.txt", "w") do |f|
f.puts hasil.split("\n").sort.join("\n")
end
如果红宝石排序取代UNIX排序是不是一种选择(也许是因为那种只是一个例子,在现实中你要的管道不能轻易被替换不同的应用红宝石),你可以直接写代码到应用程序,而不是写入标准输出。你甚至可以编写你的代码,以便足够写入任何IO。
def generate_output(out)
hasil = "input operator salah"
out.puts hasil
end
# If you decide to output the text directly to stdout (without sorting)
generate_output(stdout)
# If you instead want to pipe to sort:
IO.popen("sort > output.txt", "w") do |sort|
generate_output(sort)
end
你能解释一下你想要做什么吗? – 2009-09-02 06:44:42