【发布时间】:2016-06-06 23:56:04
【问题描述】:
我的 ruby 代码中包含的逻辑有点难以转换为 csv 输出,有没有办法以类似于 print 输出到终端时的工作方式附加每个 value?
cop_log 是数千条记录的散列
cop_log = { 'A1' => 'val1', 'B1' => 'val2', 'C1' => 'val3', 'D1' => 'val4, 'E1' => 'val5', 'F1' => 'val6', 'G1' => 'val7', 'H1' => 'val8', 'I1' => 'val9', 'J1' => 'val10, 'K1' => 'val11', 'A2' => 'val12', 'B2' => 'val13', 'C2' => 'val14', 'D2' => 'val15, 'E2' => 'val16', 'F2' => 'val17', 'G2' => 'val18', 'H2' => 'val19', 'I2' => 'val20', 'J2' => 'val21, 'K2' => 'val22'}
cop_log.each do |key, value|
if key.include?('K')
print "#{value}\n"
elsif key.include?('A')
print "#{job_number},#{pm_lookup[job_number]},#{value},"
elsif key.include?('B') || key.include?('C') || key.include?('D') ||
key.include?('E') || key.include?('F') || key.include?('G') ||
key.include?('H') || key.include?('I') || key.include?('J')
print "#{value},"
end
end
目前在终端中输出是这样的,我希望它以同样的方式打印到 csv:
val1, val2, val3, val4, val5, val6, val7, val8, val9, val10, val11
val12, val13, val14, val15, val16, val17, val18, val19, val10, val21, val22
阅读文档看起来常见的路线是执行以下操作,
CSV.open("path/to/file.csv", "wb") do |csv|
csv << ["row", "of", "CSV", "data"]
csv << ["another", "row"]
# ...
end
不幸的是,我的代码结构会让这变得有点困难......
【问题讨论】:
-
当我们学习 API 时,我们倾向于把自己画到角落里,并试图通过改变 API 而不是我们的代码来摆脱困境。最好顺其自然并按预期使用 API。你会发现你的代码更具可读性。如所写,您的代码不是惯用的,可以更清楚地重写。我认为这是一个重构的机会。至于你的“问题”,你一个都没问。我们可以猜到你需要帮助,但如果你能更清楚地说明你的目标,它会对我们和其他人有所帮助。
-
你的
keys 是什么样的?它们是您匹配的单个字母,还是您试图在字符串中查找字母?请阅读“How to Ask”和“minimal reproducible example”。我们需要最少的输入数据和预期的输出。 -
感谢您的 cmets 和回答,密钥来自使用 creek gem 由 Excel 电子表格编译而成的哈希值。整个 excel 电子表格在我的散列中,散列键是每个单元格,如 A1、B1、C1、A2、B2、C2 等。我的代码正在整理每一行。它用于处理特定公司使用的特定 excel 文件模板。我会重新考虑我的方法。 @theTinMan
-
此信息需要输入到您的问题中,就像您最初指定它一样。编辑问题,在您想要的地方添加信息,这样一切都有意义。不要使用“编辑”或“更新”标签,因为我们可以在使用 SO 的编辑历史记录时知道添加了什么。