2013-03-04 45 views
6

我试图导入字段中有引号的数据集合。他们目前分开标签。sqlite3导入引号

从我能理解根据文档(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 

因为它是不明确的地方标签是的,我已经包括了他们在这下面一行。

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)。该网页的较新版本是here

由于SQLite是公有领域的软件,所以你的问题的一个解决方案是修复sqlite的shell.c来正确处理你的文件格式。问题出现在1861行左右,

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

如果你不想引号分隔,只需注释掉这一行。该行的用途是,您可以通过引用列来在分栏中嵌入分隔符。

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

1

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

  • 编写自己的导入工具。
5

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

我弄干了。在运行后通过以下过滤器导入测试数据:

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