У меня есть файл CSV, который мне нужно прочитать и извлечь все строки, которые имеют «created_at» в определенном диапазоне. Сам CSV составляет около 5000 строк в Excel.Как разобрать хэш хэш из файла CSV
Это, как я потянув информацию из файла:
CSV.foreach("sample_data.csv", :headers => true, :header_converters => :symbol, :converters => :all) do |row|
data[row.fields[0]] = Hash[row.headers[1..-1].zip(row.fields[1..-1])]
end
Вот последний Hash создан после того, как с помощью CSV.foreach
:
2760=>{:created_at=>1483189568, :readable_date=>"12/31/2016", :first_name=>"Louise", :last_name=>"Garza", :email=>"[email protected]", :gender=>"Female", :company=>"Cogilith", :currency=>"EUR", :word=>"orchestration", :drug_brand=>"EPIVIR", :drug_name=>"lamivudine", :drug_company=>"State of Florida DOH Central Pharmacy", :pill_color=>"Maroon", :frequency=>"Yearly", :token=>"_", :keywords=>"in faucibus", :bitcoin_address=>"19jTjXLPQUL1nEmHrpqeqM1FdtDFZmUZ2E"}}
Когда я бегу data[2759].first
я получаю:
created_at
1309380645
Мне нужно тянуть каждый хэш, где created_at
находится между range = 1403321503..1406082945
. Я пробовал около двадцати различных методов, используя each
и collect
на хеше data
без успеха. Моя последняя попытка напечатала пустой {}
для каждого оригинального хэша.
Я пытаюсь проверить это без успеха:
data.each do |hash|
if hash.first.to_s.to_i > 1403321503 && hash.first.to_s.to_i < 1406082945
puts hash
end
end
Я не уверен, как изолировать значение key:created_at
, а затем увидеть, если он находится в пределах диапазона. Я также пробовал делать hash.first.to_s.to_i =/==
диапазон.
Я могу получить только значение :created_at
с помощью data[1].first.last
, но когда я пытаюсь использовать его в методе, он не работает.
Вот ссылка на оригинальный CSV: goo.gl/NOjAPo
Это не на моем рабочем компьютере, так что я не могу сделать Pastebin его.
Невозможно рассказать, что происходит из вашего описания. Вам нужно предоставить несколько строк данных, код _runnable_, который производит неправильный ответ, и соответствующий правильный ответ. Например. совсем не ясно, является ли «data» хешем или массивом. Почему бы вам просто не индексировать хэш с символами 'hash [: created_at]'? – Gene
Подсказка: '(x..y) .include? (Z)' является более кратким способом проверки того, что что-то находится внутри заданного диапазона. То, что у вас здесь, является намного более подробным и требует кучи избыточных вызовов методов. – tadman
Еще одна вещь, которая стоит иметь в виду, когда вы делаете Ruby, - это попытаться разбить вашу проблему на ряд цепочек, но простые операции. Например, «отклоняйте» строки, которые вам не нужны, или «выберите» те, которые вы делаете, а затем * «ставит» их. – tadman