我正在尝试从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
问题出在Dir.foreach
,而不是CSV.open
。
您需要提供一个目录作为参数。这就是您收到缺少参数错误的原因。
尝试:
Dir.foreach('/path/to_my/directory') do |current_file|
我认为错误消息中引用的open
是当Dir
尝试查找要打开的目录以获取foreach
的文件列表时。