2013-03-23 51 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

相关问题