2012-11-28 24 views
3

如何將這些值轉換爲數據庫表?Rails將txt文件導入db

首先,我只是把它放在那裏,而不是讓你推斷:我是一個ROR noob。我正在設計一個填充數據庫的應用程序 - (SQLite) - 允許用戶對這些值執行crud,並以與原始格式相同的格式導出文件。這種格式是這樣的,並在文檔結尾重複。橢圓表示前一個和下一個音調。

... 

[Tone27]        
Atone = 707.3       
Btone = 746.8       
Btonelength = 3       
Btonedebounce = 1      
Description = Fire Department 1     
mp3_Emails = [email protected],[email protected],[email protected]   
amr_Emails = [email protected],[email protected]   
alert_command = c:\test.bat     
post_email_command = c:\test2.bat    
radio_frequency = 154.475  
exclude_from = 13:25       
exclude_to = 13:35       
exclude_emails = [email protected],[email protected] 

... 

現在,問題是,在Rails中,獲取這些值到db表中的最簡單/最合適的方法是什麼?我知道我必須編寫一個自定義解析器,但是在ruby/rails中不夠精通,無法高效完成此任務。

回答

3

自定義分析器

您需要逐行讀取文件中的行,並讀出要保存的屬性。它可能是這個樣子:

file = File.new('example.txt', 'r') 
while (line = file.gets) 
    if line.match(/^\W[a-zA-Z0-9]*\W/) # practice your regex at rubular.com 
    # create the object here 
    end 
    if line.match(/.*=.*/) 
    pieces = line.split('=') 
    key = pieces[0].strip 
    value = pieces[1].strip 
    # add this to the object here 
    end 
end 

我建議抓住每一行,修剪空白(如果有的話),然後拆分上等號(=),然後再次微調。你有你的鑰匙/價值對。

每一個[Tone ##]都是一個新的對象,所以你想把它計劃到你的循環或循環中。

高度概括

首先,你應該使用遷移到設計數據庫表,並創建模型,以支持這些表。

接下來,您需要解析文本文件以創建具有剛纔解析的屬性和值的對象。這一步是你會遇到的最純粹的紅寶石(Rails在這裏沒有太多幫助)。這將需要一個自定義分析器在文本文件中查找要提取的特定值。

一旦您創建了使用從文本文件解析出來的屬性和值創建的對象,您將希望將所有這些對象保存到數據庫中。

我建議先構建一個示例或演示應用程序,然後再敲入此示例。在那裏有教程,你可以在你的經驗級別上幾個小時內啓動並運行一個簡單的應用程序。

這就是您需要完成的高級概述,這些步驟中的每一個很可能會導致更具體的StackOverflow問題。

+0

感謝您的概述,但我真的很喜歡「自定義分析器」的更多細節。我的問題是我需要從文本文件中提取這些數據以填充數據表,而不是使用attr和values創建對象,因爲我已經這樣做了。我的應用程序功能齊全,保存加載txt並覆蓋數據庫值。深入瞭解如何編寫此自定義分析器?謝謝。 – Todd

+0

以上評論是針對@ jwg2s的,如果不是自動的。 – Todd

+0

太棒了。你搖滾!非常詳細的答案,這也是正確的! @ jwg2s – Todd