Rails将txt文件导入db

时间:2012-11-28 13:52:16

标签: ruby-on-rails database file import

如何将这些值翻录到数据库表中?

首先,我会把它放在那里,而不是让你推断:我是一个ROR菜鸟。我正在设计一个填充数据库的应用程序 - (SQLite) - 允许用户对这些值执行crud,并以与原始格式相同的格式导出文件。这种格式是这样的,并通过文档结束重复。椭圆表示前一个和下一个音调。

...

[Tone27]                            
Atone = 707.3                        
Btone = 746.8                        
Btonelength = 3                        
Btonedebounce = 1                    
Description = Fire Department 1                
mp3_Emails = email@address.com,email2@address.com,email3@address.com          
amr_Emails = email2@textmessaging.com,email1@textmessaging.com        
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 = email2@textmessaging.com,email2@address.com

...

现在,问题是,在Rails中,将这些值放入db表的最简单/最合适的方法是什么?我知道我必须编写一个自定义解析器,但在ruby / rails中不够精通以有效地完成此操作。

1 个答案:

答案 0 :(得分: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问题。