3

我怎样才能将这些值翻录到数据库表中?

首先,我只是把它放在那里,而不是让你推断:我是一个 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 不够精通,无法有效地完成此任务。

4

1 回答 1

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##] 都将是一个新对象,因此您需要将其计划到您的一个或多个循环中。

高级概述

首先,您应该使用迁移设计数据库表并创建模型来支持这些表。

接下来,您需要解析文本文件以创建具有刚刚解析的属性和值的对象。这一步是您将遇到的最纯粹的 ruby​​(这里的 Rails 没有太多帮助)。这将需要一个自定义解析器在文本文件中查找您想要提取的特定值。

一旦您使用从文本文件中解析出来的属性和值创建了对象,您将希望将所有这些对象保存到数据库中。

我建议在深入研究之前构建一个示例或演示应用程序。那里有教程,您可以在几个小时内以您的经验水平启动并运行一个简单的应用程序。

这是您需要完成的工作的高级概述,每个步骤很可能会导致更具体的 StackOverflow 问题。

于 2012-11-28T14:11:46.443 回答