繁体   English   中英

Rails 将 txt 文件导入 db

[英]Rails import txt file into db

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

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

自定义解析器

您需要逐行读取文件并读出要保存的属性。 它可能看起来像这样:

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 问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM