当我有 2 个参数时说有 0 个参数?试图打开一个 CSV 文件写入

Saying there are 0 arguments when I have 2? Trying to open a CSV file to write into

我正在尝试从 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

您需要为 foreach 提供一个目录作为参数。这就是您收到缺少参数错误的原因。

尝试:

Dir.foreach('/path/to_my/directory') do |current_file|

我认为错误消息中引用的 open 是在 Dir 试图找到要打开的目录以获取 foreach 的文件列表时。