【问题标题】:Rails import txt file into dbRails 将 txt 文件导入数据库
【发布时间】:2012-11-16 09:34:00
【问题描述】:

如何将这些值提取到数据库表中?

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

【问题讨论】:

    标签: ruby-on-rails database file import


    【解决方案1】:

    自定义解析器

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

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

    【讨论】:

    • 感谢您的概述,但我真的想要更多关于“自定义解析器”的详细信息。我的问题是我需要从文本文件中提取这些以填充数据表,而不是创建具有 attr 和值的对象,因为我已经这样做了。我的应用程序功能齐全,无需加载 txt 并覆盖数据库值。对我如何编写这个自定义解析器有任何见解吗?谢谢。
    • 如果不是自动的,上述评论将被定向到@jwg2s。
    猜你喜欢
    • 2012-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多