Ruby: данные не имеют кавычек, но CSV.parse вызывает CSV :: MalformedCSVError: незаконное цитирование в строке x - PullRequest
2 голосов
/ 10 марта 2020

Я использую ruby CSV.parse для чтения реальных данных из листа Google для моего проекта Rails. В моем файле seed.rb я читаю данные в формате csv, например:

point_csv_path = "https://docs.google.com/spreadsheets/d/{key}/gviz/tq?tqx=out:csv&sheet=points"
CSV.parse(open(point_csv_path), :headers=>true).each do |row|
   Point.create!(
      point_id: row["point_id"].to_i, 
      point_type: row["point_type"], 
      identifier: row["identifier"].to_i, 
      longitude: row["longitude"],
      latitude: row["latitude"],
      location: row["location"],
      ordering: row["ordering"].to_i)
end

. Для данных на листе Google я вручную копирую и вставляю данные из онлайн-источника, и данные не содержат кавычек. все. Точные первые 3 строки данных на листе Google следующие:

point_id    point_type  identifier  longitude   latitude    location    ordering
1           sensor      1           -71.050054  42.360152   null        0
2           sensor      2           -71.049428  42.359373   null        0
3           sensor      3           -71.049337  42.358969   null        0

После того, как я запустил $ rails db:seed, я получаю следующее сообщение об ошибке

rails aborted!
CSV::MalformedCSVError: Illegal quoting in line 3.
/media/anyan/file/rails_project/db/seeds.rb:33:in `<main>'
/media/anyan/file/rails_project/bin/rails:9:in `<top (required)>'
/media/anyan/file/rails_project/bin/spring:15:in `<top (required)>'
bin/rails:3:in `load'
bin/rails:3:in `<main>'
Tasks: TOP => db:seed
(See full trace by running task with --trace)

Я знаю, что есть много подобных вопросов по stackoverflow, но ни один из них я не пытался решить мою проблему. Например, добавив :quote_char => "|" или :encoding => 'bom|utf-8' в качестве аргумента для CSV.parse (). Я думал, что это связано с чтением потока данных CSV, поэтому я загрузил данные на диск, и у меня та же ошибка. Как я могу решить эту проблему? Спасибо!

ОБНОВЛЕНИЕ: после загрузки CSV-файла на локальный диск и открытия с помощью VSCode первые 3 строки данных:

"point_id","point_type","identifier","longitude","latitude","location","ordering"
"1","sensor","1","-71.050054","42.360152","null","0"
"2","sensor","2","-71.049428","42.359373","null","0"
"3","sensor","3","-71.049337","42.358969","null","0"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...