如何将数据从txt文件写入数据库?

时间:2011-02-17 20:15:35

标签: c++ database file postgresql text-files

如果我有一个包含一定数量的行和列的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 

4 个答案:

答案 0 :(得分: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文件转换为制表符或逗号分隔的字段。检查数据库文档以查看加载文件是否有函数,并发现用于分隔列的字符。

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

答案 1 :(得分:1)

这样的事可能有用。 基本思想是使用print语句将行转换为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值单独执行它。

答案 2 :(得分:1)

使用PostgreSQL的COPY命令,如:

COPY random FROM 'filename' WITH DELIMITER '\t'

答案 3 :(得分:0)

我使用Sybase,其中“bcp”实用程序执行此操作。关于“postgres bcp”的快速谷歌提出了这个:

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

我意识到这不是最好的答案,但我希望能够让你顺利。

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