2014-09-12 134 views
0

我在Ruby中寫了一個madlib,並且想要將生成的madlib保存爲一個txt文件。這是我寫的,但由此產生的txt文件是空的:如何將Ruby中的put文本保存到txt文件中?

file=File.open("madlib_output.txt","a") 
file.puts 
file.close 
+0

該文件不應該爲空。應該有一個單一的空行。否則,Ruby安裝中的某些內容會嚴重損壞。 – 2014-09-12 22:15:02

+0

你說得對。我錯過了。在文件中確實存在一個單一但令人失望的空行。勒嘆。 – 2014-09-13 15:36:22

回答

0

有辦法救一個腳本文件的輸出,而不必修改腳本中的每個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 

的是,好處是該文件將被關閉塊退出時自動。

+0

我明白了這一點。它將打印到屏幕上的問題的標準輸出更改爲打印到文件。我在ruby中編寫madlib的方式是將問題打印到屏幕上,用戶輸入答案,發生10次或更多次,然後獲取用戶的答案。投標的標準是屏幕。我認爲我只是一個Ruby新手,在這個工藝代碼中允許用戶看到填充的madlib,並將該madlib保存到文件中。 – 2014-09-13 15:34:49

1

這是你在找什麼?您可以追加模式打開madlib_output.txt文件,不管你想寫將是塊如內:「喜」

File.open("madlib_output.txt","a") do |f| 
f.puts "hi" 
end 
+1

沒有。這是行不通的。 – 2014-09-13 15:44:29

+0

在這種情況下......它打開現有的madlib_output文件,並附加「HI」它..這是你正在尋找的場景? – 2014-09-13 18:16:42