2013-03-23 89 views
1

我想使用Ruby來操縱csv文件,它將一行字符串分隔爲單獨的列。以'Part#'開始創建一個列,然後將逗號移動到'Quantity'並在其旁邊創建第二個列,等等......我期望我將需要利用split方法創建一個數組。這是最好的方法,我將如何將數組粘貼到Excel中,以便創建行?使用ruby將一行字符串分隔爲單獨的列

我想發生用於報頭下面包含實際數據的行同樣的事情在那裏分離成S-001,1,[梅拉]等

這裏是CSV的樣品:

Sheet Goods 
Part#,Quantity,Description,Length(L),Width(W),Thickness(T),Square Foot (per),Square  Foot (total),Total Length (Feet),Material, 
S-001,1, [Mela] Fridge Sides, 30",12",0 5/8",2.5,2.5,2.5,Not assigned, 
S-002,1, [Mela] Fridge Sides#1,30",12",0 5/8",2.5,2.5,2.5,Not assigned, 
S-003,1, [Mela] Fridge TB,32 1/4", 30",0 5/8",6.72,6.72,2.69,Not assigned, 
S-004,1, [Mela] Fridge TB#1,32 1/4", 30",0 5/8",6.72,6.72,2.69,Not assigned, 
S-005,1, [Mela] Fridge back,32 3/4",11 1/4",0 5/8",2.56,2.56,2.73,Not assigned, 

任何幫助將不勝感激!

編輯:

這是該數據應該是什麼樣子的,它的完成時間:

Sheet Goods        
Pat# Quantity Description Length (L) Thickness (T) Square Foor (per) Square Foot (total) Total Length (Feet) Material 
S-001 1 [Mela] Fridge Sides 30 5/8 2.5 2.5 2.5 Not assigned 

凡逗號被刪除,逗號之間的數據放入單獨的列。

馬克

+1

操作後應該看起來像什麼? – Linuxios 2013-03-23 23:53:32

回答

1

首先,使用圖書館的任務:CSV。其次,將行按列名索引(而不是無意義的數字)非常方便。 (在這裏你會得到所有寬度)的一個例子:

require 'csv' 

rows = CSV.open("data.csv") 
name, headers = rows.take(2) 

quantities = rows.map do |row_values| 
    row = Hash[headers.zip(row_values)] 
    # here you specific processing 
    row["Width(W)"] 
end 

正如吉姆指出,你的文字無效CSV,雙引號被保留。

+1

我絕對推薦使用Ruby的核心CSV庫,但請記住,粘貼在問題中的CSV無效。只要你的源CSV實際上有效,你應該使用@ tokland的答案。如果你的CSV無效,請先解決這個問題。 – 2013-03-24 00:02:42

+0

很好,謝謝你的提問。關於CSV格式以及如何將行索引的建議。關於「獲取所有寬度」的含義是什麼?我試圖弄清楚如何在逗號之間分割數據,並將它粘貼到相鄰列中。任何想到特定處理的結構是什麼? – user2195595 2013-03-24 02:29:50

+0

「獲取所有寬度」僅僅是一個用數據我不明白你在逗號之間進行分割的問題 – tokland 2013-03-24 10:08:54

相關問題