Ruby - 从STDIN读取CSV

时间:2016-10-03 09:29:14

标签: ruby csv

我试图从.CSV文件中读取并创建具有每行属性的对象。 我的代码运行正常:

def self.load_csv
    puts "Name of a file?"
    filename = STDIN.gets.chomp
    rows = []
    text = File.read(filename).gsub(/\\"/,'""')
    CSV.parse(text, headers: true, header_converters: :symbol) do |row|
      row = row.to_h
      row = row.each_with_object({}){|(k,v), h| h[k.to_sym] = v}
      rows << row
    end

    rows.map do |row|
      Call.new(row)
    end
  end
end

现在我想从STDIN获取文件名。我只是改变了:

def self.load_csv(filename)
    rows = []
    text = File.read(filename).gsub(/\\"/,'""')
    CSV.parse(text, headers: true, header_converters: :symbol) do |row|
      row = row.to_h
      row = row.each_with_object({}){|(k,v), h| h[k.to_sym] = v}
      rows << row
    end

    rows.map do |row|
      Call.new(row)
    end
  end
end

当我尝试ruby program.rb filename.csv我得到错误没有将String隐式转换为IO,并且在用File.read删除行之后它什么也没做 - 就像无限循环一样?当然,我在代码的不同部分使用STDIN参数调用ceratain方法。我过去使用类似的代码从STDIN读取成功,这次我做错了什么?

1 个答案:

答案 0 :(得分:0)

此代码正常运行:

error 400 Bad Request