我有類似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