2013-03-04 34 views
6

フィールド内に引用符を含むデータのコレクションをインポートしようとしています。それらは現在タブ分割されています。引用符付きのsqlite3インポート

私がドキュメント(http://www.sqlite.org/cvstrac/wiki?p=ImportingFiles)に従って理解できることから、sqliteシェルは文字通り引用符を解釈しなければならないと私は思いますが、問題はないはずです。

私はこのライン上の問題に実行してきたことは:

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 

タブがどこにあるか、それは明らかではないので、私はこの次の行にそれらを含めました。

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 

私は次のことを試みていますが、エラーが発生しています。

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

二重引用符は使用しませんが、引用符は重要です。私は\"で引用符を逃れることはできないようです。

データを正しくインポートするにはどうすればよいですか?

答えて

2

あなたが参照しているウェブページは古いです(URLのcvstrac部分に注目してください; sqliteは現在cvsではなく、化石を使用しています)。そのWebページの新しいバージョンはhereです。

SQLiteはパブリックドメインソフトウェアなので、問題の解決策の1つはsqliteのshell.cを修正してファイル形式を正しく処理することです。問題は1861行にあります

if(c=='"') inQuote = !inQuote; 

引用区切りを使用したくない場合は、この行をコメントアウトしてください。行の目的は、列を引用することで区切り文字を列に埋め込むことができるようにすることです。

もう1つの方法は、SQLiteをサポートするデータベースマネージャを使用することです。それらの多くがあり、ほとんどがファイルのインポート/エクスポートをサポートすると主張しています。

1

sqlite3コマンドラインツールは、それがサポートするどのようなインポート形式でも柔軟性がありません。

あなたの周りの二重引用符を追加し、フィールドでの二重引用符をエスケープする

  • 変更インポートファイルをできました。

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

    または

  • 独自のインポートツールを記述しますか
  • は、一連のSQL文へのインポートファイルに変換します。

5

Sqlite3の.importツールは、.separatorがカンマではない場合でも、入力がカンマ区切り値形式であるかのように動作します。引用符( ")を二重にして(" ")フィールドを引用してエスケープすることができます。

私はきれいになっています。次のフィルタを使用してテストデータをインポートした後、インポートします。

sed 's/"/""/g;s/[^\t]*/"&"/g' file.txt >quoted.txt 
関連する問題