Я пишу скрипт ruby, чтобы принять входной файл CSV. Я хочу сделать довольно JSON-файл. Я чувствую, что я так близко, но, похоже, я не могу туда попасть. Мой оригинальный проект был в JS, но требования были изменены, чтобы сделать его файлом Ruby.Пожалуйста, помогите мне с моим скриптом Ruby (ruby 2.0.0p481)
Мой входной файл выглядит следующим образом
идентификатору, описание, цены, стоимость, price_type, quantity_on_hand, size_1_name, size_1_price, size_2_name, size_2_price, size_3_name, size_3_price
одна вещь, следует отметить, что некоторые из значения в файле CSV могут отсутствовать, потому что их не существует.
require 'csv'
require 'json'
def is_int(str)
return !!(str =~ /^[-+]?[1-9]([0-9]*)?$/)
end
lines = CSV.open(ARGV[0],{:col_sep => ","}).readlines
# remove first entry of the lines array
keys = lines.shift
lines.each do |values|
# convert the line into a hash and transform string into int
#hash=Hash[keys.zip(values.map{|val| is_int(val) ? val.to_i : val}) ]
hash = keys.zip(values.map{ val})
# Write a file with the hash results
File.open("#{hash['NAME']}.json", "w") do |f|
f.write JSON.pretty_generate [hash]
end
end
Выход Я пытаюсь получить это
[
{
id: 111010,
description: 'Coffee',
price: 1.25,
cost: 0.80,
price_type: 'system',
quantity_on_hand: 100000,
modifiers: [
{
name: 'Small',
price: -0.25
},{
name: 'Medium',
price: 0.00
},{
name: 'Large',
price: 0.30
}
]
версия Ruby, я использую 2.0.0p481
Error was
usr/lib/ruby/2.0.0/csv.rb:1254:in `initialize': no implicit conversion of nil into String (TypeError)
from /usr/lib/ruby/2.0.0/csv.rb:1254:in `open'
from /usr/lib/ruby/2.0.0/csv.rb:1254:in `open'
from stockimporter.rb:8:in `<main>'
Что ваш вопрос? Вы получили сообщение об ошибке? – spickermann
добавил ошибку. Я забыл это сделать. Извините –
У меня нет времени на это, но я подозреваю, что 'ARGV [0]' оценивает 'nil'. Добавьте строку 'p ARGV [0]' непосредственно перед вызовом 'open', чтобы убедиться. –