2011-02-17 185 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' 
相關問題