【问题标题】:Saying there are 0 arguments when I have 2? Trying to open a CSV file to write into说当我有 2 个参数时有 0 个参数?试图打开一个 CSV 文件写入
【发布时间】: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 小时后接受,或者,如果您认为您的问题/答案与未来的访问者无关,您可以完全删除您的问题。您应该简单地使用解决方案编辑您的问题。

标签: ruby file csv dir


【解决方案1】:

我认为问题出在Dir.foreach,而不是CSV.open

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

试试:

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

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

【讨论】:

    猜你喜欢
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-03
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 2017-02-02
    • 2019-10-31
    相关资源
    最近更新 更多