Znalazłem problem z analizą CSV w FasterCSV (1.5.0), który wydaje się być prawdziwym błędem, ale mam nadzieję, że istnieje obejście tego problemu.Przezwyciężenie podstawowego problemu z parsowaniem CSV za pomocą klejnotu FasterCSV
Zasadniczo, dodanie spacji po separatorze (w moim przypadku przecinka), gdy pola są ujęte w cudzysłowy, generuje MalformedCSVError
.
Oto prosty przykład:
# No quotes on fields -- works fine
FasterCSV.parse_line("one,two,three")
=> ["one", "two", "three"]
# Quotes around fields with no spaces after separators -- works fine
FasterCSV.parse_line("\"one\",\"two\",\"three\"")
=> ["one", "two", "three"]
# Quotes around fields but with a space after the first separator -- fails!
FasterCSV.parse_line("\"one\", \"two\",\"three\"")
=> FasterCSV::MalformedCSVError: Illegal quoting on line 1.
będę zły, czy jest to błąd w FasterCSV?
Czy to nie spacja mówi, że pole faktycznie nie jest otoczone cudzysłowami (ponieważ pierwszy znak nie jest cudzysłowem) i że cytaty powinny być brane jako część treści pola? –
Wygląda na to, że się mylę. "Jeśli pola nie są ujęte w cudzysłowy, cudzysłowy mogą nie pojawiać się w polach." - http://tools.ietf.org/html/rfc4180#section-2 –
Masz rację, nie zdawałem sobie sprawy, że istnieje "specyfikacja" dla CSV, ale wygląda na to, że tak jest. FasterCSV jest rzeczywiście bardzo surowy. – Olly