C语言:关于文件读取→写数据库的问题

wolfer008 2007-05-22 11:40:13
我想从文件里读取数据写进数据库,应该怎么作处理
文件的格式是固定的每个字段是以tab分隔
比如test.dat文件里的数据是以下面的格式存放的
a1 tab b1 tab c1
a2 tab b2 tab c2
a3 tab b3 tab c3
我最初的想法是从文件里读取一条记录存到一个结构体里
再从结构体写进数据库再读取下一条记录一直这么循环操作直到最后一条记录操作完
如果test.dat文件有很多条记录就得一条一条写进数据库效率太低

没有更好的方法实现吗?

...全文
256 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
eqxu 2007-05-23
  • 打赏
  • 举报
回复
如果文件内容很大,那就分块读入到内存,
然后再通过strstr将文件分行
再通过scanf/结构化读取

构建批量写入数据库的语句
执行之


再者,可以通过匹配一定的格式用SQL语句来倒入
如mysql中有LOAD DATA INFILE
freeman868 2007-05-23
  • 打赏
  • 举报
回复
赞成LS
jixingzhong 2007-05-23
  • 打赏
  • 举报
回复
一个类似的例子,
主要就是在 fscanf 中进行正确的格式控制即可。

如果你的文件是规格化的结构提信息,
那么推荐使用 rb 方式操作文件,
并使用 fread 按照结构体进行读取 。
jixingzhong 2007-05-23
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <stdlib.h>

int main()
{
FILE *fp=fopen("test.txt", "r");
float arr[3][2], *p;
int i, j;

p = (float *)arr;
for(i=0; i<6; i++)
fscanf(fp, "%f,", &(p[i]));

for(i=0; i<3; i++)
{
for(j=0; j<2; j++)
printf("%f\t", arr[i][j]);
printf("\n");
}
system("pause");
return 0;
}


test.txt 文件内容:(在工程当前目录下)
3420744.414,521459.884,
3420744.414,521459.882,
3420744.415,521459.883,
freeman868 2007-05-23
  • 打赏
  • 举报
回复
用fscanf()来读取文件,然后写入数据库


FILE *fp;
...

char a[50]={'\0'}, b[50]={'\0'}, c[50]={'\0'};
while(!feof(fp))
{
fscanf(fp, "%c %c %c", &a, &b, &c);
//接下来写入数据库
...
}
freeman868 2007-05-23
  • 打赏
  • 举报
回复
用fscanf()来读取文件,然后写入数据库


FILE *fp;
...

char a[50]={'0'}, b[50]={'0'}, c[50]={'0'};
while(!feof(fp))
{
fscanf(fp, "%c %c %c", &a, &b, &c);
//接下来写入数据库
...
}

myseven 2007-05-23
  • 打赏
  • 举报
回复
up
spofmy 2007-05-23
  • 打赏
  • 举报
回复
有道理
taodm 2007-05-23
  • 打赏
  • 举报
回复
那你就读比如1000条再写数据库呀。

64,652

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧