如果我有一个包含一定数量的行和列的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 :(得分: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)
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。