9

フィールド内に引用符があるデータのコレクションをインポートしようとしています。それらは現在、タブで区切られています。

ドキュメント ( 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

二重引用符なしで機能しますが、引用符は重要です。どちらでも引用符を逃れることはできないようです\"

必要なデータを適切にインポートするにはどうすればよいですか?

4

4 に答える 4

2

コマンドライン ツールは、sqlite3サポートするインポート形式に関してあまり柔軟ではありません。

あなたは出来る

  • インポート ファイルを変更して、二重引用符を追加し、フィールド内の二重引用符をエスケープします。また
  • インポート ファイルを一連の 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');
    

    また

  • 独自のインポート ツールを記述します。
于 2013-03-05T08:12:43.797 に答える
1

あなたが参照している Web ページは古いものです (URL の cvstrac 部分に注意してください。これはプレゼントです。sqlite は現在、cvs ではなく化石を使用しています)。その Web ページの新しいバージョンはこちらです。

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

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

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

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

于 2013-03-05T00:14:22.803 に答える