2009-09-02 73 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