2012-04-01 7 views
2

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 bin

Wenn 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?

+1

Mögliche Duplikat: http://StackOverflow.com/Questions/1807942/Overcoming-Abasic-Problem-with-csv-Parsing-use-the-Fastercsv-Gem – WarHog

+0

Ich werde diese Antwort kaufen. Danke @WarHog! –

Antwort

3

Das ist korrektes Verhalten. Es ist nicht fragil.

Ihr Komma nach "vier" beendet das Feld und das nächste Feld beginnt sofort mit dem Leerzeichen.

Sie können ein Zitat nicht gültig in die Mitte eines Felds setzen (ohne es zu umgehen).

+0

Gemäß RFC http://tools.ietf.org/html/rfc4180#page-2 können Sie ein Komma in das Feld einfügen, wenn Sie es in doppelte Anführungszeichen setzen. –

Verwandte Themen