2011-02-17 140 views
0

如果我有一定数量的行和列的txt(列数未知的开始处,列由标签分隔),我怎样才能将数据导出到数据库?我设法遍历第一行来计算列数并相应地创建一个表,但是现在我需要遍历每行并将数据插入到相应的列中。我怎样才能做到这一点? txt文件的如何将数据从txt文件写入数据库?

例子:

Name Size Population GDP 
aa 2344 1234 12 
bb 2121 3232 15 
... ... .. .. 
.. .. .. .. 

表已创建:

CREATE TABLE random id INT, Name char(20), Size INT, Population INT, GDP INT 

回答

0

我与Sybase合作,其中 “BCP” 工具做到这一点。在“Postgres的BCP”快速谷歌带来了这一点:

http://lists.plug.phoenix.az.us/pipermail/plug-devel/2000-October/000103.html

我意识到它不是最好的答案,但不够好,让你去,我希望。

哦,您可能需要更改文本格式,使其逗号或制表符分隔。为此使用sed。

+0

我看着“与COPY添加数据”,但我只能找到关于如何将数据添加到给定文件名的表指令。如果我必须读取文件名(使用ifstream),该怎么办?另外,我需要添加唯一的id以及来自文件的其余数据。 – Data 2011-02-17 20:51:13

+0

啊,那你问的是如何在C程序存储器中存储数据时向数据库添加行?在这种情况下,你需要澄清你的问题。 – Arkadiy 2011-02-18 14:07:01

1

困难的部分是阅读文本字段。根据您的定义,字段标题由空格分隔。这对文本字段是否正确?

一个通用的过程是:

Create an SQL CREATE statement from the header text. 
Execute the SQL statement. 
While reading a line of text doesn't fail do 
    Parse the text into variables. 
    Create an SQL INSERT statement using field names and values from the variables. 
    Execute the SQL statement. 
End-While 

另一种解决方案是将TXT文件转换成标签或逗号分隔字段。检查数据库文档,看看是否有加载文件的功能,并且还可以发现用于分隔列的字符。

如果您需要特定帮助,请提出更具体或更详细的问题。

+0

对不起,是的TXT文件是制表符分隔的。我正在使用C++,所以我使用ifstream读取文件,创建了一个“随机”表,其中包含一列“id”(它应该包含txt文件的唯一ID,我想在同一个表中存储多个txt文件),然后我通过使用isstringstream的第一行并使用ALTER TABLE随机ADD ...)来添加所需数量的列。我应该怎么做将文件+ id(由用户分配)中的数据输入到“random”表中? – Data 2011-02-17 20:48:17

1

这样的事情可能会起作用。 的基本思想是使用打印语句将行转换为SQL命令。 然后你可以使用sql命令解释器执行这些命令。

cat textfile.txt | sed 's/^\([^ ]*\) /'\1' /; s/[ \t]+/,/g;' | awk '($NR!=1) {print "INSERT INTO random (Name,size,population,gdp) VALUES (" $0 ");" }' > sqlcommands.txt 

对于未知的列数,这可能工作。

cat textfile.txt | sed 's/^\([^ ]*\) /'\1' /; s/[ \t]+/,/g;' | awk '($NR!=1) {print "INSERT INTO random VALUES (ID," $0 ");" }' > sqlcommands.txt 

用需要的id值替换ID。但是您需要分别为每个ID值执行它。

1

使用PostgreSQL的COPY,命令是这样的:

COPY random FROM 'filename' WITH DELIMITER '\t' 
相关问题