【发布时间】:2015-06-15 00:02:23
【问题描述】:
我正在尝试从 CSV 文件中读取数据并使用方程式将人们编入组中。我将他们所属的组的名称附加到他们的行创建的数组的末尾。然后我将它写入一个新文件,这样我就不会覆盖原始文件以防万一出现问题。
此外,它会遍历目录并对多个 csv 文件执行此操作。
但是,当我尝试打开要写入的新文件时,它是这样说的:
Segmenter.rb:12:in `open': wrong number of arguments (0 for 1) (ArgumentError)
from Segmenter.rb:12:in `foreach'
from Segmenter.rb:12:in `<main>'
这是删除系数的脚本。系数数组中的所有 x 都是我脚本中的数字。
require 'csv'
coefficients = [
[x, x, x, x, x, x, x, x, x, "Utilitarians"],
[x, x, x, x, x, x, x, x, x, "Hometown School/Social"],
[x, x, x, x, x, x, x, x, x, "State Pride"],
[x, x, x, x, x, x, x, x, x, "Hard-Wired Advocates"],
[x, x, x, x, x, x, x, x, x, "Game Hunters"]
]
Dir.foreach do |current_file|
data_set = CSV.read(current_file)
data_set.array.each do |row|
segment_value = 0
segment_name = ""
coefficients.each do |segment|
if (segment[0] * row[1] + segment[1]*row[2] + segment[2]*row[3] + segment[3]*row[4] + segment[4]*row[5] + segment[5]*row[6] + segment[6]*row[7] + segment[7]*row[8]) > segment_value
segment_value = segment[0] * row[1] + segment[1]*row[2] + segment[2]*row[3] + segment[3]*row[4] + segment[4]*row[5] + segment[5]*row[6] + segment[6]*row[7] + segment[7]*row[8]
segment_name = segment[8]
end
row << segment_name
end
CSV.open("#{current_file.basename} SEGMENTED.csv", "w") do |writer|
data_set.array.each do |data|
writer << data
end
end
end
end
【问题讨论】:
-
愚蠢的问题,但是您是否在更改后保存了代码?它说错误在第 12 行,但你的 open 方法甚至不在它附近
-
是的。它以某种方式通过 Dir.foreach 调用滚动它。无论如何,我认为那个 foreach 电话在第 11 行。复制错误后,我取出了不必要的要求。然后我复制了实际的脚本。无关紧要的微小变化。
-
问也无妨。我打电话给 cat Segmenter.rb 以确保这不是问题所在。哈哈。
-
你有什么问题?
-
如果您已经解决了问题,您应该在下面发布您的答案,您可以在 48 小时后接受,或者,如果您认为您的问题/答案与未来的访问者无关,您可以完全删除您的问题。您应该不简单地使用解决方案编辑您的问题。