我正在编写一个脚本,将使用DSV或位置文件执行各种任务。这些任务各不相同,就像为文件创建数据库表或创建用于解析它的shell脚本一样。
因为我理想化了我的脚本会收到一个"描述符"作为执行其任务的输入。然后它将解析此描述符并相应地执行其任务。
我提出了一些关于如何指定描述符文件的想法,但没有真正设法得到一些强大的东西 - 可能是因为我缺乏ruby经验。
看起来,解析描述符的最好方法是使用ruby语言本身,然后以某种方式捕获解析异常以变成与上下文更相关的东西。
示例:
我将阅读的文件看起来像(myfile.dsv
):
jhon,12343535,27/04/1984
dave,53245265,30/03/1977
...
描述符文件myfile.des
包含:
FILE_TYPE = "DSV"
DSV_SEPARATOR = ","
FIELDS = [
name => [:pos => 0, :type => "string"],
phone => [:pos => 1, :type => "number"],
birthdate => [:pos => 2, :type => "date", :mask = "dd/mm/yyyy"]
]
用法应该是:
ruby script.rb myfile.des --task GenerateTable
所以程序script.rb
应该加载并解析描述符myfile.des
并相应地执行任何任务。
有关如何执行此操作的任何想法?
答案 0 :(得分:2)
不要自己滚动,而是使用标准库中的YAML。
将文件命名为 descriptor.yml ,并填写:
---
:file_type: DSV
:dsv_separator: ","
:fields:
:name:
:pos: 0
:type: string
:phone:
:pos: 1
:type: number
:birthdate:
:pos: 2
:type: date
:mask: dd/mm/yyyy
您可以通过以下方式阅读配置:
require 'yaml'
settings = YAML.load_file 'descriptor.yml'
这将返回设置 Hash,如:
{:file_type=>"DSV",
:dsv_separator=>",",
:fields=>
{:name=>{:pos=>0, :type=>"string"},
:phone=>{:pos=>1, :type=>"number"},
:birthdate=>{:pos=>2, :type=>"date", :mask=>"dd/mm/yyyy"}}}
然后您可以根据需要访问以配置您的应用程序。