Autor Zpráva
JosPol
Profil
Dobrý den,

řeším problém s importem csv do sql.
Uvozovky, které uzavírají textové řetězce (ENCLOSED BY '"') jsou obsaženy v textu samotném.
Při importu běžným způsobem uvedeným níže, jsou uvozovky obsaženy v textu brány, jako oddělovače a import se pak provede chybně. Hodnoty nesedí na sloupce.


QUERY
load data local infile 'test.csv' into table tabulka_cz
CHARACTER SET utf8
FIELDS TERMINATED BY ';' ENCLOSED BY '"'
LINES terminated by '\n'

OBSAH CSV
ID,TEXT, HODNOTA A
25;"Název: "Jan Novák" abcd";1

Csv obsahuje více sloupců.

Umíte s tím někdo poradit?

Děkuji
Keeehi
Profil
JosPol:
Tohle totiž není validní CSV soubor. Validní by vypadal takto:
ID,TEXT, HODNOTA A 
25;"Název: ""Jan Novák"" abcd";1

Uvozovky uvnitř stringu se v csv escapují tak, že jsou hned dvě za sebou. Oprav to a zkus to s validním CSV souborem.
JosPol
Profil
Keeehi:
Pokud bych to dokázal opravit, tak bych zde zbytečně neptal.
Data nám byla tak dodána.

Zkouším, zda už někdo něco podobného řešil.


Malá úvaha1:
Ideálně importovat data od prvního až po chybný sloupec, například první 3 sloupce (4 je chybný).
A následně importovat data z konce řádku, kde víme, že 5 sloupců za chybným je sprvně. Tedy importovat od konce. Vše do samostaných tabulek a pak sloučit.
To si ale nemyslím, že to sql umí.

Malá úvaha2:
Php skript na import, který řekne, že pokud je uvozovka, následuje ji, či předchází středník.

Jsem lajk, tak budu rád za support.

Díky moc
Kajman
Profil
Pokud to nechcete parsovat, tak by šlo ještě udělat postupně náhrady.
" za ""
;"" za ;"
""; za ";

Edit: pokud už v původním textu budou uvnitř textů vedle sebe středník a uvozovky, nemusí to být korektní řešení.
JosPol
Profil
Kajman:
Nejjednoduší řešení, které mě nenapadlo.
Díky moc!

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0