【问题标题】:separate a row of strings into separate columns using ruby使用 ruby​​ 将一行字符串分成单独的列
【发布时间】:2013-03-23 23:26:35
【问题描述】:

我正在尝试使用 Ruby 操作 csv 文件,它将一行字符串分成单独的列。从“Part#”开始创建一列,然后将逗号移至“Quantity”并在其旁边创建第二列,依此类推......我预计我将需要使用 split 方法来创建一个数组。这是最好的方法吗?如何将数组粘贴到 excel 中以创建行?

我希望标题下方包含实际数据的行也发生同样的事情,这些数据分为 S-001、1、[Mela] 等。

这是 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

删除逗号并将逗号之间的数据放入单独的列中。

标记

【问题讨论】:

  • 手术后应该是什么样子?

标签: ruby excel csv


【解决方案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

正如 Jim 所说,您的文本不是有效的 CSV,双引号被保留。

【讨论】:

  • 我绝对推荐使用上述 Ruby 的核心 CSV 库,但请记住,粘贴在问题中的 CSV 是无效的。引号 (") 不会被转义。只要您的源 CSV 确实有效,您就应该使用@tokland 的答案。如果您的 CSV 无效,请先解决该问题。
  • 太好了,感谢您提供有关 CSV 格式以及如何为行编制索引的建议。 “获得所有宽度”是什么意思?我试图弄清楚如何在逗号之间拆分数据并将其粘贴到相邻的列中。知道该特定处理的结构是什么吗?
  • "getting all widths" 只是对数据做某事的一个例子。我不明白你在逗号之间分割的问题。
  • 刚刚编辑了主要帖子以显示数据的外观。尝试学习一些基本的 Ruby 编程,因为我绝对是初学者。感谢您的帮助!
猜你喜欢
  • 2014-08-22
  • 2022-01-19
  • 2010-12-06
  • 2014-08-22
  • 1970-01-01
  • 2020-07-30
  • 1970-01-01
  • 2017-07-28
  • 1970-01-01
相关资源
最近更新 更多