将CSV转换为数组?

3
有什么想法可以使用vim将此CSV转换为Ruby数组吗?
起始CSV:
Year,Make,Model
1997,Ford,E350
2000,Mercury,Cougar

期望的数组:

car_info = [
  {'Year' => '1997', 'Make' => 'Ford', 'Model' => 'E350'},
  {'Year' => '2000', 'Make' => 'Mercury', 'Model' => 'Cougar'},
]

我有超过2000个类似上面的CSV条目,我希望能够快速重新格式化它以供在我的Rails应用程序中使用。我想使用vim,但我也可以接受其他选项。


为什么不使用Ruby读取文件并将其转换为所需的对象呢? - Peter Brown
1
这是个好主意--你能在回答中发一个例子吗? - Sauce McBoss
2个回答

6
FasterCSV.read("path/to/file.csv", :headers => true).map do |row|
  { "Year" => row[0], "Make" => row[1], "Model" => row[2] }
end

PS:安装faster_csv宝石


+1. 在读取CSV的时候,你也可以使用:headers => true - Michael Kohl
太棒了。这比手动操作更有前途。谢谢! - Sauce McBoss

4
在vim中,您可以使用正则表达式进行全局搜索和替换:
:g/\(.*\),\(.*\),\(.*\)/s//{'Year' => '\1', 'Make' => '\2', 'Model' => '\3'}/g

然后相应地编辑生成文件的第一行和最后一行。

谢谢 - 这看起来是一个不错的解决方案。我不知道你可以将搜索与正则表达式结合起来。 - Sauce McBoss

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接