Ich finde die CSV-Analyse in Ruby 1.9.3 bemerkenswert zerbrechlich. So sehr, dass ich frage mich, ob ichRuby CSV.parse sehr wählerisch bei Anführungszeichen
etwas falsch zu machen binWenn ich folgend in irb bekomme ich eine Fehlermeldung:
1.9.3-p125 :011 > require 'csv'
=> true
1.9.3-p125 :012 > a = 'one,two,three, "four, five",six'
=> "one,two,three, \"four, five\",six"
1.9.3-p125 :013 > arr = CSV.parse(a)
CSV::MalformedCSVError: Illegal quoting in line 1.
from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/csv.rb:1925:in `block (2 levels) in shift'
from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/csv.rb:1887:in `each'
from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/csv.rb:1887:in `block in shift'
from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/csv.rb:1849:in `loop'
from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/csv.rb:1849:in `shift'
from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/csv.rb:1791:in `each'
from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/csv.rb:1805:in `to_a'
from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/csv.rb:1805:in `read'
from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/lib/ruby/1.9.1/csv.rb:1379:in `parse'
from (irb):13
from /Users/disaacs/.rvm/rubies/ruby-1.9.3-p125/bin/irb:16:in `<main>'
Ich habe festgestellt, dass das Problem der zusätzliche Platz ist vor dem " vier, fünf "Wert. Wenn ich den Speicherplatz entferne, funktioniert es.
1.9.3-p125 :010 > a = 'one,two,three,"four, five",six'
=> "one,two,three,\"four, five\",six"
1.9.3-p125 :011 > arr = CSV.parse(a)
=> [["one", "two", "three", "four, five", "six"]]
Leerzeichen vor den anderen Werten verursacht kein Problem. Die folgenden parses nur gut
Gibt es einige Parse-Option, die ich vermisse, die die Verwendung von Zitaten so fragile macht?
Mögliche Duplikat: http://StackOverflow.com/Questions/1807942/Overcoming-Abasic-Problem-with-csv-Parsing-use-the-Fastercsv-Gem – WarHog
Ich werde diese Antwort kaufen. Danke @WarHog! –