Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将数据从txt文件写入数据库?_C++_Database_File_Postgresql_Text Files - Fatal编程技术网

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

C++ 如何将数据从txt文件写入数据库?,c++,database,file,postgresql,text-files,C++,Database,File,Postgresql,Text Files,如果我有一个具有一定行数和列数的txt(开始时列数未知,列由tab分隔),如何将数据导出到数据库中?我已经设法遍历了第一行以计算列的数量并相应地创建了一个表,但是现在我需要遍历每一行并将数据插入到相应的列中。我该怎么做 txt文件的示例: Name Size Population GDP aa 2344 1234 12 bb 2121 3232 15 ... ... .. .. .. .. .. .. 已创建该表: CREATE TABLE random id INT, Name char(

如果我有一个具有一定行数和列数的txt(开始时列数未知,列由tab分隔),如何将数据导出到数据库中?我已经设法遍历了第一行以计算列的数量并相应地创建了一个表,但是现在我需要遍历每一行并将数据插入到相应的列中。我该怎么做

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 
我与Sybase合作,其中“bcp”实用程序执行此操作。在“postgres bcp”上快速搜索google会发现:

我意识到这不是最好的答案,但我希望这足以让你走

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

我使用Sybase,其中“bcp”实用程序会执行此操作。在“postgres bcp”上快速搜索google会发现:

我意识到这不是最好的答案,但我希望这足以让你走


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

困难的部分是在文本字段中阅读。根据您的定义,字段标题用空格分隔。对于文本字段是这样吗

一般流程是:

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


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

难的部分是在文本字段中阅读。根据您的定义,字段标题用空格分隔。对于文本字段是这样吗

一般流程是:

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


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

类似的问题可能会奏效。 基本思想是使用print语句将行转换为SQL COMMANND。 然后可以使用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值分别执行它。

类似的操作可能会起作用。 基本思想是使用print语句将行转换为SQL COMMANND。 然后可以使用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值分别执行它。

使用PostgreSQL的命令,类似于:

COPY random FROM 'filename' WITH DELIMITER '\t'
使用PostgreSQL的命令,类似于:

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

抱歉,是的,TXT文件是以制表符分隔的。我使用C++,所以我用IFFISH读取文件,创建一个表“随机”一列“ID”(它应该包含TXT文件的唯一ID,我想在同一个表中存储一个以上的TXT文件),然后我通过ISSTRIGSTATH流的第一行,使用ALTLE表随机添加……来添加所需的列数。我应该如何将文件+id(由用户指定)中的数据输入表“random”?只要文件具有相同的字段名和类型,就可以在同一个表中存储多个文件。就用户ID而言,该信息最好放在另一个表中。可能是一个[用户id、文件名、表名]的表。在web上搜索“数据库标准格式”。您希望设置数据库以减少跨表的数据重复。对不起,是的,TXT文件是以制表符分隔的。我使用C++,所以我用IFFISH读取文件,创建一个表“随机”一列“ID”(它应该包含TXT文件的唯一ID,我想在同一个表中存储一个以上的TXT文件),然后我通过ISSTRIGSTATH流的第一行,使用ALTLE表随机添加……来添加所需的列数。我应该如何将文件+id(由用户指定)中的数据输入表“random”?只要文件具有相同的字段名和类型,就可以在同一个表中存储多个文件。就用户ID而言,该信息最好放在另一个表中。可能是一个[用户id、文件名、表名]的表。在web上搜索“数据库标准格式”。您希望设置数据库以减少表之间的数据重复。我查看了“使用副本添加数据”,但我只能找到关于如何在给定文件名的表中添加数据的说明。如果我必须读取文件名(使用ifstream),该怎么办?另外,我需要添加唯一的id以及文件中的其余数据。啊,那么您要问的是,当值已经在C程序内存中时,如何向数据库添加行?在这种情况下,您需要澄清您的问题。我查看了“使用副本添加数据”,但我只能找到关于如何在给定文件名的表中添加数据的说明。如果我必须读取文件名(使用ifstream),该怎么办?另外,我需要添加唯一的id以及文件中的其余数据。啊,那么您要问的是,当值已经在C程序内存中时,如何向数据库添加行?在这种情况下,你需要澄清你的问题。在这种情况下,我应该知道确切的列数,但当我第一次开始时,我不知道有多少列。那么,在所有情况下,插入随机(姓名、规模、人口、gdp)是否都有效?我的意思是,我可以有名字大小人口gdp之类的东西,不管是什么,我都不知道列的数量,也不知道它们的名字S@kenny是的,只在你的评论之后才看到C++。但希望这是可以使用的,我不知道如何在C++中使用。(系统(“cat textfile……………>sqlcommands.txt”);--;)除了开玩笑,我也不知道