2013-03-04 12 views
6

Próbuję zaimportować kolekcję danych, która zawiera cytaty w polach. Są one obecnie oddzielone tabulatorami.import sqlite3 z cytatami

Z tego, co rozumiem zgodnie z dokumentami (http://www.sqlite.org/cvstrac/wiki?p=ImportingFiles), powłoka sqlite powinna interpretować cytaty dosłownie i zakładam, że oznacza to, że nie powinienem mieć problemu.

Byłem uruchomiony na problem z tej linii:

1193782372 Lips Like Sugar (12" Mix) Echo & the Bunnymen 80's/12": The Extended Collection a76d9b04-51d9-4672-801f-356ab36dbae7 ccd4879c-5e88-4385-b131-bf65296bf245 1abb270a-e791-407f-a989-ff3ad6f8401c 

Ponieważ nie jest jasne, gdzie karty są, podaję je w tej następnej linii.

1193782372\tLips Like Sugar (12" Mix)\tEcho & the Bunnymen\t80's/12": The Extended Collection\ta76d9b04-51d9-4672-801f-356ab36dbae7\tccd4879c-5e88-4385-b131-bf65296bf245\t1abb270a-e791-407f-a989-ff3ad6f8401c 

Próbuję wykonać następujące czynności, ale otrzymuję błąd.

sqlite> .separator \t 
sqlite> .import ./file.txt table 
Error: ./file.txt line n: expected 7 columns of data but found 5 

Działa bez podwójnych cytatów, ale cytaty są ważne. Wydaje mi się, że nie mogę też uciec od cytatów z \".

Jak mogę poprawnie zaimportować dane, które chcę?

Odpowiedz

2

Strona internetowa, do której się odwołujesz, jest stara (zauważ fragment cvstrac adresu URL, który jest gratisowy, sqlite używa teraz fossil, a nie cvs). Nowsza wersja tej strony to here.

Ponieważ SQLite jest oprogramowaniem domeny publicznej, jednym z rozwiązań problemu jest naprawa pliku sqlite w shell.c, aby poprawnie obsługiwać format pliku. Problem dotyczy linii 1861, która ma Jeśli nie chcesz, aby ograniczono cytowanie, po prostu skomentuj ten wiersz. Celem linii jest umieszczenie ograniczników w kolumnach poprzez cytowanie kolumny.

Innym podejściem jest użycie menedżera baz danych obsługującego SQLite; jest ich wiele, a większość twierdzi, że wspiera import/eksport plików.

1

Narzędzie wiersza polecenia w wersji sqlite3 nie jest zbyt elastyczne w obsługiwanych formatach importu.

mogli Państwo

  • zmienić plik import dodać cudzysłowie i uciec cudzysłowów w polach; lub
  • przekonwertować plik import do serii SQL:

    INSERT INTO MyTable VALUES(
        1193782372, 
        'Lips Like Sugar (12" Mix)', 
        'Echo & the Bunnymen 80''s/12": The Extended Collection', 
        'a76d9b04-51d9-4672-801f-356ab36dbae7', 
        'ccd4879c-5e88-4385-b131-bf65296bf245', 
        '1abb270a-e791-407f-a989-ff3ad6f8401c'); 
    

    lub

  • napisać własne narzędzie importowania.
5

Narzędzie .import Sqlite3 zachowuje się tak, jakby jego dane wejściowe były w formacie wartości rozdzielanych przecinkami, nawet jeśli .separator nie jest przecinkiem. Możesz uniknąć wycinków ("), podwajając je (" ") i, podając całe pole, w którym występują.

Mam czyste.import twoich danych testowych po uruchomieniu go za pomocą następującego filtra:

sed 's/"/""/g;s/[^\t]*/"&"/g' file.txt >quoted.txt