我在Ruby中寫了一個madlib,並且想要將生成的madlib保存爲一個txt文件。這是我寫的,但由此產生的txt文件是空的:如何將Ruby中的put文本保存到txt文件中?
file=File.open("madlib_output.txt","a")
file.puts
file.close
我在Ruby中寫了一個madlib,並且想要將生成的madlib保存爲一個txt文件。這是我寫的,但由此產生的txt文件是空的:如何將Ruby中的put文本保存到txt文件中?
file=File.open("madlib_output.txt","a")
file.puts
file.close
有辦法救一個腳本文件的輸出,而不必修改腳本中的每個puts
。
最簡單的方法是使用重定向在命令行路由輸出。在該命令處運行帶有> some_file
的腳本將將所有STDOUT路由到該文件。同樣,使用> some_file 2>&1
會將STDOUT和STDERR路由到同一個文件。當代碼等待輸入時,這將不會捕獲在gets
中輸入的任何內容,因爲這不會被視爲程序輸出。
如果你不介意改變你的代碼一點,你可以暫時重新分配給一個文件改變stdout是什麼解釋的想法:
old_stdout = $stdout
File.open('output.txt', 'w') do |fo|
$stdout = fo
# ----
# your code goes here
puts "hello world"
# ----
end
$stdout = old_stdout
運行的是,再看看文件「 output.txt「,你會看到」hello world「,即使我們沒有直接打印到文件fo
,就像我們通常使用fo.puts
那樣。
做同樣的事情有很多種方式,但它們相當於將STDOUT或STDERR指向其他地方,寫入它們,然後重置它們。
通常情況下,如果我們從一開始就輸出到文件打算,那麼我們應該使用一個File.open
塊:
File.open('output.txt', 'w') do |fo|
fo.puts "hello world"
end
的是,好處是該文件將被關閉塊退出時自動。
我明白了這一點。它將打印到屏幕上的問題的標準輸出更改爲打印到文件。我在ruby中編寫madlib的方式是將問題打印到屏幕上,用戶輸入答案,發生10次或更多次,然後獲取用戶的答案。投標的標準是屏幕。我認爲我只是一個Ruby新手,在這個工藝代碼中允許用戶看到填充的madlib,並將該madlib保存到文件中。 – 2014-09-13 15:34:49
這是你在找什麼?您可以追加模式打開madlib_output.txt文件,不管你想寫將是塊如內:「喜」
File.open("madlib_output.txt","a") do |f|
f.puts "hi"
end
沒有。這是行不通的。 – 2014-09-13 15:44:29
在這種情況下......它打開現有的madlib_output文件,並附加「HI」它..這是你正在尋找的場景? – 2014-09-13 18:16:42
該文件不應該爲空。應該有一個單一的空行。否則,Ruby安裝中的某些內容會嚴重損壞。 – 2014-09-12 22:15:02
你說得對。我錯過了。在文件中確實存在一個單一但令人失望的空行。勒嘆。 – 2014-09-13 15:36:22