Ruby on rails 如何从没有';你没有列名吗?

Ruby on rails 如何从没有';你没有列名吗?,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我有一个包含以下字段的表: # == Schema Information # # Table name: scheme_details # # id :integer not null, primary key # scheme_id :integer not null # nav_date :datetime # nav_price :float # repurchase_p

我有一个包含以下字段的表:

# == Schema Information
#
# Table name: scheme_details
#
#  id               :integer          not null, primary key
#  scheme_id        :integer          not null
#  nav_date         :datetime
#  nav_price        :float
#  repurchase_price :float
#  sale_price       :float
#  closing_date     :datetime
#  net_change       :float
#  prev_nav         :float
#  prev_nav_date    :datetime
#  upd_flag         :string(1)
#  created_at       :datetime         not null
#  updated_at       :datetime         not null
#  change           :float
#
现在我从ftp服务器获得了一个扩展名为
ace
的数据文件,它没有列名

下面是文件的示例数据

<<row>>1|5/24/2016 12:00:00 AM|1000.49|1000.49|1000.49||0|0|1000.49|5/23/2016 12:00:00 AM|A<</row>>
<<row>>2|5/24/2016 12:00:00 AM|2350.0193|2350.0193|2350.0193||0.0210084954593086|0.493599999999788|2349.5257|5/23/2016 12:00:00 AM|A<</row>>
<<row>>3|5/24/2016 12:00:00 AM|1005.4653|1005.4653|1005.4653||0.0210096133902824|0.211199999999963|1005.2541|5/23/2016 12:00:00 AM|A<</row>>
<<row>>4|5/24/2016 12:00:00 AM|1001.2549|1001.2549|1001.2549||0.0210080549857693|0.210300000000075|1001.0446|5/23/2016 12:00:00 AM|A<</row>>
<<row>>9|5/24/2016 12:00:00 AM|1005.428|1005.428|1005.428||0.0208611403115122|0.209699999999998|1005.2183|5/23/2016 12:00:00 AM|A<</row>>
<<row>>10|5/24/2016 12:00:00 AM|2226.3533|2226.3533|2226.3533||0.0208725620468016|0.464600000000246|2225.8887|5/23/2016 12:00:00 AM|A<</row>>
<<row>>11|5/24/2016 12:00:00 AM|1001.2478|1001.2478|1001.2478||0.0208683199024505|0.208899999999971|1001.0389|5/23/2016 12:00:00 AM|A<</row>>
<<row>>14|5/24/2016 12:00:00 AM|14.369|14.369|14.369||-0.567434779600033|-0.0820000000000007|14.451|5/23/2016 12:00:00 AM|A<</row>>
<<row>>15|5/24/2016 12:00:00 AM|33.37|33.37|33.37||-0.566150178784281|-0.190000000000005|33.56|5/23/2016 12:00:00 AM|A<</row>>
<<row>>22|5/24/2016 12:00:00 AM|15.87|15.87|15.87||-0.501567398119123|-0.0800000000000001|15.95|5/23/2016 12:00:00 AM|A<</row>>
<<row>>23|5/24/2016 12:00:00 AM|64.37|64.37|64.37||-0.540791100123601|-0.349999999999994|64.72|5/23/2016 12:00:00 AM|A<</row>>
<<row>>115|5/24/2016 12:00:00 AM|10.1146|10.1146|10.1146||-0.00197730058924853|-0.00020000000000131|10.1148|5/23/2016 12:00:00 AM|A<</row>>
<<row>>116|5/24/2016 12:00:00 AM|25.8745|25.8745|25.8745||-0.00193236714975395|-0.000499999999998835|25.875|5/23/2016 12:00:00 AM|A<</row>>
<<row>>117|5/24/2016 12:00:00 AM|10.3195|10.3195|10.3195||-0.00193804083451587|-0.000199999999999534|10.3197|5/23/2016 12:00:00 AM|A<</row>>
<<row>>118|5/24/2016 12:00:00 AM|10.317|10.317|10.317||-0.0019385104485668|-0.000199999999999534|10.3172|5/23/2016 12:00:00 AM|A<</row>>
<<row>>119|5/24/2016 12:00:00 AM|10.0863|10.0863|10.0863||-0.00198284836166692|-0.000199999999999534|10.0865|5/23/2016 12:00:00 AM|A<</row>>
<<row>>160|5/24/2016 12:00:00 AM|10.0729|10.0729|10.0729||0.0148936592727928|0.00150000000000006|10.0714|5/23/2016 12:00:00 AM|A<</row>>
<<row>>165|5/24/2016 12:00:00 AM|17.3863|17.3863|17.3863||0.0155318806231003|0.00269999999999726|17.3836|5/23/2016 12:00:00 AM|A<</row>>
<<row>>166|5/24/2016 12:00:00 AM|10.0315|10.0315|10.0315||0|0|10.0315|5/23/2016 12:00:00 AM|A<</row>> 
1 | 5/24/2016 12:00:00 AM | 1000.49 | 1000.49 | 0 | 0.49 | 1000.49 | 5/23/2016 12:00:00 AM | A
2 | 5/24/2016 12:00:00 AM | 2350.0193 | 2350.0193 | 2350.0193 | 0.0210084949595933086 | 0.49359999788 | 2349.5257 | 5/23/2016 12:00:00 A
3 | 5/24/2016 12:00:00 AM | 1005.4653 | 1005.4653 | 1005.4653 | 0.021009613902824 | 0.211199999963 | 1005.2541 | 5/23/2016 12:00:00 A
4 | 5/24/2016 12:00:00 AM | 1001.2549 | 1001.2549 | 1001.2549 | 0.02100805049857693 | 0.21030000000000075 | 1001.0446 | 5/23/2016 12:00 AM |
2016年5月24日上午9:00:00 | 1005.428 | 1005.428 | 1005.428 | 0.02086140311122 | 0.20969999998 | 1005.2183 | 2016年5月23日上午12:00 |
10 | 5/24/2016 12:00:00 AM | 2226.3533 | 2226.3533 | 2226.3533 | 0.0208725620468016 | 0.464600000000246 | 2225.8887 | 5/23/2016 12:00 AM |
11 | 5/24/2016 12:00:00 AM | 1001.2478 | 1001.2478 | 1001.2478 | 0.02086833199024505 | 0.208899999971 | 1001.0389 | 5/23/2016 12:00:00 A
14 | 5/24/2016 12:00:00 AM | 14.369 | 14.369 | 14.369 |-0.567434779600033 |-0.0820000000007 | 14.451 | 5/23/2016 12:00:00 A
15 | 5/24/2016 12:00:00 AM | 33.37 | 33.37 |-0.566150178784281 |-0.190000000000005 | 33.56 | 2016年5月23日12:00:00 A
22 | 5/24/2016 12:00:00 AM | 15.87 | 15.87 | |-0.501567398119123 |-0.080000000000001 | 15.95 | 5/23 | A 12:00:00
23 | 5/24/2016 12:00:00 AM | 64.37 | 64.37 | 64.37 |-0.540791100123601 |-0.34999999994 | 64.72 | 5/23/2016 12:00:00 A
115 | 5/24/2016 12:00:00 AM | 10.1146 | 10.1146 | 10.1146 |-0.00197730058924853 |-0.000200000000000131 | 10.1148 | 5/23/2016 12:00 A
116 | 5/24/2016 12:00:00 AM | 25.8745 | 25.8745 | 25.8745 |-0.00193236714975395 |-0.0004999998835 | 25.875 | 2016年5月23日12:00:00 A
117 | 5/24/2016 12:00:00 AM | 10.3195 | 10.3195 | 10.3195 |-0.00193804083451587 |-0.00019999959534 | 10.3197 | 5/23/2016 12:00:00 AM |
118 | 5/24/2016 12:00:00 AM | 10.317 | 10.317 |-0.0019385104485668 |-0.0001999999534 | 10.3172 | 5/23/2016 12:00:00 AM |
119 | 5/24/2016 12:00:00 AM | 10.0863 | 10.0863 | |-0.00198284836166692 |-0.0001999999534 | 10.0865 | 5/23/2016 12:00:00 AM |
160 | 5/24/2016 12:00:00 AM | 10.0729 | 10.0729 | 10.0729 | 0.014893652727928 | 0.00150000000000006 | 10.0714 | 5/23/2016 12:00:00 A
165 | 5/24/2016 12:00:00 AM | 17.3863 | 17.3863 | 17.3863 | 0.01553188062303 | 0.002699999726 | 17.3836 | 5/23/2016 12:00 AM |
166 | 5/24/2016 12:00:00 AM | 10.0315 | 10.0315 | 0 | 0 | 10.0315 | 5/23/2016 12:00:00 AM | A
我能够解析文件并删除不需要的数据,如
和使用
|
分割数据

我面临的问题是如何将数据映射到列名,因为示例数据文件没有列名,只有数据

我的一个解决方案是在文件顶部添加一个虚拟列名行,通过它我可以映射数据

但我不确定这样做是否正确

任何关于如何解决这个问题的帮助或建议都会很有帮助

谢谢大家!


注意:如果您需要查看我编写的代码,我很乐意提供。

您从表定义中知道它们的顺序,因此您可以通过索引号引用该列。如果一行存储在变量
行中
,则
id
字段将是
行[0]

当然,这并不容易阅读,为了更好地阅读,您可以使用常量:

ID = 0
.....
this_rows_id = row[ID]

如果您不喜欢列编号和常量名称之间映射的手动定义,但可以访问模式定义,则可以解析它并生成一个小Ruby文件,然后
需要该文件
。这在项目的初始阶段可能很方便,因为架构定义可能会更改。

您从表定义中知道它们的顺序,因此可以通过索引号引用列。如果一行存储在变量
行中
,则
id
字段将是
行[0]

当然,这并不容易阅读,为了更好地阅读,您可以使用常量:

ID = 0
.....
this_rows_id = row[ID]
如果您不喜欢列编号和常量名称之间映射的手动定义,但可以访问模式定义,则可以解析它并生成一个小Ruby文件,然后
需要该文件
。这在项目的初始阶段可能很方便,因为在初始阶段,模式定义可能会发生更改

  • 您可以定义一个数组

  • 对于每一行,将所有拆分的值推送到该行中

  • 现在根据数组的索引值映射到您的模式

  • 您可以定义一个数组

  • 对于每一行,将所有拆分的值推送到该行中

  • 现在根据数组的索引值映射到您的模式


  • 你是在问如何确定哪一列是哪一列吗?我发现任何人都不太可能做到这一点——向数据的创建者索要一些文档。您可以定义一个数组,并将所有拆分的值推送到其中,每行一个。现在用你的模式根据数组的索引值进行映射。thankx@PraveshKhatri我完全按照你说的做了,非常感谢@我的问题解决了。你是在问如何确定哪一列是哪一列吗?我发现任何人都不太可能做到这一点——向数据的创建者索要一些文档。您可以定义一个数组,并将所有拆分的值推送到其中,每行一个。现在用你的模式根据数组的索引值进行映射。thankx@PraveshKhatri我完全按照你说的做了,非常感谢@弗雷德里克:我的问题解决了。