【问题标题】:Append lines to a row in a csv file based on the first field in another row根据另一行中的第一个字段将行附加到 csv 文件中的一行
【发布时间】:2025-12-23 20:50:06
【问题描述】:

Ruby 新手,试图弄清楚如何实现这一点:

我有一个包含如下数据的 .csv 文件:

D1, Name, Address, Data, Date
D2, 123
D2, 6413
D2, 1207
D1, Name, Address, Data, Date
D2, 789
D1, Name, Address, Data, Date

...等等。

我可以让它在 D1 行之后将 D2 行的数据附加到它后面的 D1 行的末尾,但它忽略了多个 D2 行。基本上,我需要将每个 D1 行之后的所有 D2 行的值作为一个额外字段附加到 D1 行的末尾。

【问题讨论】:

  • 最好显示您想要的输出应该是什么样子。
  • 你能把你写的代码贴出来吗?
  • 我们需要查看您的代码:“有关您编写的代码问题的问题必须在问题本身中描述具体问题 - 并包括有效的代码来重现它。有关指导,请参阅 SSCCE.org 。”
  • 告诉我们你的预期输出是什么.. ?

标签: ruby csv


【解决方案1】:

我在这里使用一个字符串作为输入,但您应该能够对 CSV 文件执行相同的操作。对于每一行,检查第一个元素是否包含 D1。如果是,则将该行添加到结果中,如果不是,则将最后一个元素添加到结果的最后一个元素中。

string = "D1, Name, Address, Data, Date
D2, 123
D2, 6413
D2, 1207
D1, Name, Address, Data, Date
D2, 789
D1, Name, Address, Data, Date"

lines, result = string.tr(',', '').lines.map(&:split), []
lines.each{|line| line.first['D1'] ? result << line : result.last << line.last }
p result #=> [["D1", "Name", "Address", "Data", "Date", "123", "6413", "1207"], ["D1", "Name", "Address", "Data", "Date", "789"], ["D1", "Name", "Address", "Data", "Date"]]

【讨论】:

    最近更新 更多