2013-03-04 5 views
6

Alanlar içinde tırnak işareti içeren bir veri koleksiyonunu içe aktarmaya çalışıyorum. Şu anda ayrıldılar.sqlite3 İçe aktarılanlar

Dokümanlara (http://www.sqlite.org/cvstrac/wiki?p=ImportingFiles) göre anlayabildiğimden, sqlite kabuğu, sözdizimini tam anlamıyla yorumlamalı ve bunun bir sorun olmaması gerektiği anlamına geldiğini varsayalım.

bu hat üzerinde bir sorun haline çalışan oldum:

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 

sekmeler nerede açık olmadığından, bu aşağıdaki satırda bunları ekledik.

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 

Aşağıdakileri yapmaya çalışıyorum ama hata alıyorum.

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

Çift tırnak işaretleri olmadan çalışır, ancak tırnak işaretleri önemlidir. Ben de \" ile alıntılardan kaçabilmek mümkün görünmüyor.

İstediğim verileri nasıl düzgün şekilde alabilirim?

cevap

2

Başvuruda bulunduğunuz web sayfası eskidir (URL'nin URL'si olan boşluğa dikkat edin; sqlite şu an fosil kullanmaz, değil). Bu web sayfasının yeni sürümü here.

SQLite, ortak etki alanı yazılımı olduğundan, sorununuza bir çözüm, dosya biçiminizi doğru bir şekilde işlemek için sqlite'ın shell.c dosyasını düzeltmektir. Sorun, satır sınırlaması istemiyorsanız, satır satır 1861 civarındadır. Bu satırı alıntılamak isterseniz, yalnızca bu satırı yorumlayın. Çizginin amacı, sütunları alıntılayarak sütunlarınızda sınırlayıcıları gömebilirsiniz.

Başka bir yaklaşım, SQLite'yi destekleyen bir Veritabanı Yöneticisi kullanmaktır; Bunların birçoğu var ve çoğu da dosya içe/dışa aktarmayı destekliyor.

1

sqlite3 komut satırı aracı, desteklediği içe aktarma biçimlerinde çok esnektir.

Yapabilirsin

  • değişim alanlarında çift tırnak çift tırnak eklemek ve kaçmak için ithalat dosyası; ya
  • SQL tabloların bir dizi ithalat dosyası dönüştürmek:

    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'); 
    

    veya

  • Kendi ithalat aracı yazın.
5

Sqlite3'ün .import aracı, girdi bir virgül olmasa bile virgülle ayrılmış değerler biçiminde olduğu gibi davranır. Onları iki katına çıkararak (") ve tırnak işaretleri (") içinden çıkabilirsiniz.

Temizledim.Test verilerinizi aşağıdaki filtreden geçirdikten sonra içe aktarın:

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