2015-05-05 75 views
-1

好吧,我所擁有的是一個ruby文件,它接受一個輸入,並將它寫入另一個ruby文件。我不想把它寫成一個文本文件,因爲我試圖將這個項目插入到一個Hash中,以後可以在程序的另一個運行中訪問它,這隻能通過將信息寫入文本文件或另一個文件紅寶石文件。在這種情況下,我想它被寫入到另一個紅寶石file.Here的第一個文件:使用ruby寫入ruby文件

test_text=gets.chomp 
to_write_to=File.open("rubylib.rb", "a") 
test_text="hobby => #{test_test}," 
to_write_to.puts test_text 

這將插入在頁面底部的給定信息。另一個文件是這樣的:(rubylib.rb)

user_info={ 
    "name" => "bob",, 
    "favorite_color" => "red" 

} 

我有三重問題:

1)是否有可能加入test_text到哈希右括號過嗎?

2)使用這種方法,運行rubylib.rb文件時,會將添加的文本解析爲代碼或其他內容?

3)有沒有更好的方法來做到這一點?

我想要做的是實際上將新數據寫入哈希,以便在下次運行文件時仍然存在,以存儲有關用戶的數據。因爲如果我按正常方式添加它,則在下次運行文件時它將丟失。有沒有辦法在不寫入文本文件的情況下在ruby文件的運行之間存儲數據?

我已經盡了最大的努力給你提供你需要的信息,並盡我所能地解釋情況。如果您需要澄清或更多信息,請留下評論,我會盡力回覆評論。

感謝您的幫助

+0

你試圖做的是非常危險的 - 這是可能的用戶通過寫輸出的到達紅寶石文件執行任意Ruby代碼。 – hjing

+0

你爲什麼要在磁盤上存儲信息?這根本不會擴展。 –

+0

@theTinMan停止編輯它我不希望你改變它。我以我想要的方式擁有它。 –

回答

2

你應該使用YAML這一點。

這裏是你如何可以創建與您在示例中使用的數據的.yml文件:

require "yaml" 
user_info = { "name" => "bob", "favorite_color" => "red" } 
File.write("user_info.yml", user_info.to_yaml) 

這將創建一個類似如下的文件:

--- 
name: bob 
favorite_color: red 

上的後續執行你的程序,你可以加載.yml文件,你會得到相同的哈希,你開始:

user_info = YAML.load_file("user_info.yml") 
# => { "name" => "bob", "favorite_color" => "red" } 

您可以添加新的項目,哈希,並再次將其保存:

user_info["hobby"] = "fishing" 
File.write("user_info.yml", user_info.to_yaml) 

現在文件有以下內容:

--- 
name: bob 
favorite_color: red 
hobby: fishing 
+2

代替'YAML.dump(USER_INFO,開放( 「user_info.yml」, 「W」))的'使用'File.write( 「user_info.yml」,user_info.to_yaml)'。 –

+0

謝謝@theTinMan這就是爲什麼我愛堆棧溢出!今天又學到了新的東西。 :)我會更新我的答案。 –

+0

@MattBrictson非常感謝你!我會很快試用這個,希望它可以工作。我在哪裏存儲.yml文件?與其他文件? –

1

使用數據庫,甚至SQLite的,它會讓你存儲數據爲多個會話沒有任何編碼。按照原樣寫入文件實際上不具有可擴展性或實用性。你會很快就會遇到一些真正的問題。

我建議您看看Sequel及其相關文檔,瞭解如何輕鬆使用數據庫。這是一種更具可擴展性的方法,隨着代碼的增長,它將爲您節省很多麻煩。

+0

全能生病檢查出來。我可以安裝它使用標準的寶石安裝,然後鍵入續集? –