将输出写入文件

时间:2009-09-02 05:45:18

标签: ruby

我有类似的Ruby代码:

ok.rb
hasil = "input operator salah"
 puts hasil

exec("sort ok.rb > output.txt") if fork.nil?

它只是将所有代码写入output.txt。但是,我只希望将hasil结果写入output.txt。我应该如何修改这样的最终结果的代码?

2 个答案:

答案 0 :(得分:2)

您已执行sort命令,将ok.rb作为输入。相反,您希望运行ok.rb并将其输出作为输入进行排序。

在不了解Ruby的情况下,我希望它会像:

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

(你只提供了一行输出,所以不需要排序很多。)

答案 1 :(得分:1)

最干净的方法是将前面的代码更改为不直接生成到stdout的输出,而是仅构建字符串,然后从ruby中对其进行排序并将其打印到文件中。像这样举例如:

hasil = "input operator salah"

File.open("output.txt", "w") do |f|
  f.puts hasil.split("\n").sort.join("\n")
end

如果用ruby sort替换unix排序不是一个选项(可能因为排序只是一个例子而且实际上你正在使用不能用ruby替换的不同应用程序),你可以编写你的代码到应用程序直接而不是写入stdout。你甚至可以编写你的代码,以便写入任何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