带引号的sqlite3导入

ben*_*uuu 8 sqlite tsv

我正在尝试导入在字段中包含引号的数据集合.它们目前是制表符分隔的.

从我可以理解的文档(http://www.sqlite.org/cvstrac/wiki?p=ImportingFiles),sqlite shell应该按字面解释引号,我认为这意味着我不应该有问题.

我一直遇到这方面的问题:

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
Run Code Online (Sandbox Code Playgroud)

由于不清楚标签的位置,我将它们包含在以下行中.

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
Run Code Online (Sandbox Code Playgroud)

我正在尝试执行以下操作但收到错误.

sqlite> .separator \t
sqlite> .import ./file.txt table
Error: ./file.txt line n: expected 7 columns of data but found 5
Run Code Online (Sandbox Code Playgroud)

它没有双引号,但引号很重要.我似乎也无法逃脱报价\".

如何正确导入我想要的数据?

fla*_*let 8

Sqlite3的.import工具的行为就像它的输入采用逗号分隔值格式一样,即使.separator不是逗号.您可以通过加倍("")引用它们出现的整个字段来转义引号(").

在通过以下过滤器运行后,我得到了一个干净的.import测试数据:

sed 's/"/""/g;s/[^\t]*/"&"/g' file.txt >quoted.txt
Run Code Online (Sandbox Code Playgroud)


Dou*_*rie 1

您引用的网页是旧的(请注意 URL 的 cvstrac 部分,这是赠品;sqlite 现在使用化石,而不是 cvs)。该网页的新版本在这里

由于 SQLite 是公共领域软件,因此解决您的问题的一种方法是修复 sqlite 的 shell.c 以正确处理您的文件格式。问题出在第 1861 行附近

if( c=='"' ) inQuote = !inQuote;
Run Code Online (Sandbox Code Playgroud)

如果您不想引用分隔符,只需注释掉这一行即可。该行的目的是让您可以通过引用列来将分隔符嵌入到列中。

另一种方法是使用支持 SQLite 的数据库管理器;其中有很多,并且大多数声称支持文件导入/导出。