Я использую Ruby 2.4. Как разобрать строку с разделителями табуляции, содержащую символ цитаты? Это то, что сейчас со мной происходит ...Как разобрать строку с разделителями табуляции, содержащую цитату?
2.4.0 :003 > line = "11\tDave\tO\"malley"
=> "11\tDave\tO\"malley"
2.4.0 :004 > CSV.parse(line, col_sep: "\t")
CSV::MalformedCSVError: Illegal quoting in line 1.
from /Users/davea/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/csv.rb:1912:in `block (2 levels) in shift'
from /Users/davea/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/csv.rb:1868:in `each'
from /Users/davea/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/csv.rb:1868:in `block in shift'
from /Users/davea/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/csv.rb:1828:in `loop'
from /Users/davea/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/csv.rb:1828:in `shift'
from /Users/davea/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/csv.rb:1770:in `each'
from /Users/davea/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/csv.rb:1784:in `to_a'
from /Users/davea/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/csv.rb:1784:in `read'
from /Users/davea/.rvm/rubies/ruby-2.4.0/lib/ruby/2.4.0/csv.rb:1324:in `parse'
from (irb):4
from /Users/davea/.rvm/gems/[email protected]/gems/railties-5.0.1/lib/rails/commands/console.rb:65:in `start'
from /Users/davea/.rvm/gems/[email protected]/gems/railties-5.0.1/lib/rails/commands/console_helper.rb:9:in `start'
from /Users/davea/.rvm/gems/[email protected]/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:78:in `console'
from /Users/davea/.rvm/gems/[email protected]/gems/railties-5.0.1/lib/rails/commands/commands_tasks.rb:49:in `run_command!'
from /Users/davea/.rvm/gems/[email protected]/gems/railties-5.0.1/lib/rails/commands.rb:18:in `<top (required)>'
from bin/rails:4:in `require'
from bin/rails:4:in `<main>'
Хотя Teh пример иллюстрирует мою точку зрения, я не могу легко контролировать вход поступает. Таким образом, хотя ответ coudl быть < «Удалить все цитаты из ТОЙ строки перед разбором: «Я хочу как можно ближе сохранить данные.
Я не хотел чтобы попасть в сорняки в моем вопросе, но у меня есть общая функция, которая на самом деле является CSV.parse (строка, col_sep: разделитель), в которой разделитель может быть запятой или вкладкой. Существуют ли другие разделители? Вы говорите, что нет способа чтобы заставить это работать с использованием метода CSV.parse? – Dave
В библиотеке CSV могут обрабатываться только данные, которые соответствуют, по крайней мере, примерно стандарту CSV. Так как ваших данных нет, у вас осталось несколько неоптимальных решений Я добавил альтернативу этому ответу. – tadman