CSV не будет импортировать по ключу в хэш (Rails) - PullRequest
0 голосов
/ 13 июня 2018

У меня проблемы с импортом этого CSV:

municipality,province,province abbrev,country,region
Vancouver,British Columbia,BC,Canada,Metro Vancouver - North

В частности, Vancouver не возвращается, когда я ищу его значение по его ключу:

municipality_name = row["municipality"]

Вот код:

def self.import_csv(file)
  CSV.foreach(file, headers: true,
                    skip_blanks: true,
                    skip_lines: /^(?:,\s*)+$/,
                    col_sep: ",") do |row|

    municipality_name = row["municipality"]
    puts row.to_h
    puts "municipality_name: #{municipality_name}"
    puts "row[0]: #{row[0]}"
  end
end

Вот вывод:

irb(main):052:0> Importers::Municipalities.import_csv('tmp/municipalities.csv')
{"municipality"=>"Vancouver", "province"=>"British Columbia", "province abbrev"=>"BC", "country"=>"Canada", "region"=>"Metro Vancouver - North"}
municipality_name:
row['municipality']:
row[0]: Vancouver

Похоже, я упустил что-то очевидное.Я подумал, что, возможно, в CSV есть скрытый персонаж, но в Sublime он включил скрытые символы, а кубиков не было.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Похоже, что это была проблема с CSV, и код работает нормально.Создал новый CSV, набрал тот же контент, и это сработало.Может быть, невидимый персонаж, которого Sublime не показывал?Не могу проверить, как я вытер исходный CSV, который вызывал проблемы.

0 голосов
/ 13 июня 2018

Вам нужно вызвать to_h в строке, если вы хотите получить к нему доступ по ее ключам.В противном случае это массивоподобный объект, доступный по индексам.

def self.import_csv(file)
  CSV.foreach(file, headers: true,
                    skip_blanks: true,
                    skip_lines: /^(?:,\s*)+$/,
                    col_sep: ",") do |row|
    row = row.to_h
    municipality_name = row["municipality"]
    puts "municipality_name: #{municipality_name}"
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...