2012-03-18 175 views
3

有關如何使用vim將此CSV轉換爲ruby數組的任何想法?將CSV轉換爲數組?

開始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,但我也願意接受其他選項。

+0

爲什麼不直接讀取文件並將其轉換爲使用Ruby的對象? – 2012-03-18 18:46:31

+1

這是一個好主意 - 你能在答案中發表一個例子嗎? – 2012-03-18 20:36:45

回答

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寶石

+3

'faster_csv'已經與1.9捆綁在一起,它被稱爲'csv'。 – Reactormonk 2012-03-18 19:26:49

+0

+1。讀取CSV時,您還可以使用':headers => true'。 – 2012-03-18 19:52:35

+0

太棒了。這看起來比手工做更有希望。謝謝! – 2012-03-18 20:40:45

4

在vim中,你可以使用全局搜索和使用正則表達式替換:

:g/\(.*\),\(.*\),\(.*\)/s//{'Year' => '\1', 'Make' => '\2', 'Model' => '\3'}/g 

然後相應地編輯生成的文件的第一個和最後一個行。

+0

謝謝 - 這看起來像一個很好的解決方案。不知道你可以結合搜索和正則表達式。 – 2012-03-18 20:42:38