2009-09-02 149 views
0

我有类似Ruby代码:写输出到文件

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

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

它只是写的所有代码到output.txt。但是,我只想要hasil结果写入output.txt。我应该如何修改代码以达到这样的最终结果?

+0

你能解释一下你想要做什么吗? – 2009-09-02 06:44:42

回答

2

您已执行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 

(所以不完全是大量的排序你仅供输出的单行。)

1

最彻底的方法是改变上面的代码中不产生直接输出到标准输出,而是只生成字符串,然后从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