私は.CSVファイルから読み込み、すべての行の属性を持つオブジェクトを作成しようとしています。 私のコードは正常に動作します:Ruby - STDINから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
と私はIOに文字列の暗黙の変換はエラーなしだ、とFile.read
の行を削除した後、それは何もしませんルビーprogram.rbのfilename.csv試す - 多分無限ループなどを?もちろん、私はコードの異なる部分でSTDIN引数を持つceratainメソッドを呼び出します。私は過去に成功したSTDINから読み込むために類似のコードを使用しましたが、今回は間違っていますか?
あなたはSTDINからファイル名を取得し、パラメータとして 'load_csv'メソッドに渡しますか? –
はい、正確です。私はload_csv(STDIN)を呼び出します – Jes
あなたが言ったように変更しましたが、無限ループのように何もしません。 – Jes