将字典txt文件写入数据库中
2020-03-30 07:48
746 查看
将字典写入数据库中
sqlite3_exec()->cql语句中不在外边创建,则需添加create table if not exists dict (id int,char meaning,… );
插入记录:insert into dict values (…);
若插入过程中出现错误,则可以用delete from dict 清空表
获取dict.txt文件信息,调用函数fgets();按行获取
获取到一行文件包括词和意思 如下图所示,每一行包括序号,单词及单词解释。
获取到一行内容即一个字符串,那么需要对获取到的字符串进行解析,需要定义两个指针,一个指向单词,一个指向单词解释;
然后使用strtok();函数来分割。按空格分隔
解析后放入数据库
添加用insert into dict values (…);
id word mean dt
id:序号自增
dt:datetime(‘now’,’+8 hours’)
sprintf(buf,"insert into dict values (NULL,’%s’,’%s’,datetime(‘now’,’+8 hours’));"word,mean);拼一个字符串
对于o’clock类似单词会用到转义字符"%s"
此处使用转义字符可以将字符串替换后的字符里面的 ( ’ ) 屏蔽掉,不会造成不配对。
题目: 将一个进20000行的dict.txt文件写入数据库中,每行会有单词和解释,需要用到字符串分割的方法,要注意,文本中每行的结尾为
od -c dict.txt|less 查看文件所有字符,按一个格子一个格子显示,得到每一行的结束都为 \r\n
代码
#include <stdio.h> #include <sqlite3.h> #include <string.h> #include <stdlib.h> #include <sys/stat.h> #include <sys/types.h> int main(int argc, const char *argv[]) { sqlite3 *db; //打开数据库,成功返回0,失败返回错误码 int ret = sqlite3_open("/home/linux/test.db",&db); if(SQLITE_OK != ret) { fprintf(stderr,"fail to open db %s\n",sqlite3_errmsg(db)); } //打开文件 FILE *fd = fopen("/home/linux/dict.txt","r"); //文件打开失败 if(NULL == fd) { perror("fail to open"); exit(1); } //创建表 char sql_cmd[1024] = "create table if not exists dict (id int,word char,means char,dt datetime);"; char *errmsg; int ret1 = sqlite3_exec(db,sql_cmd,NULL,NULL,&errmsg); if(SQLITE_OK != ret1) { fprintf(stderr,"sql_cmd create table error:%s\n",errmsg); sqlite3_free(errmsg); exit(1); } //删除表 //错误示例:sql_cmd = "delete from dict"; bzero(sql_cmd,1024); strcpy(sql_cmd,"delete from dict"); int ret2 = sqlite3_exec(db,sql_cmd,NULL,NULL,&errmsg); if(SQLITE_OK != ret2) { fprintf(stderr,"sql_cmd error %s\n",errmsg); sqlite3_free(errmsg); exit(1); } //存放文件属性 struct stat st; ret = stat("/home/linux/dict.txt",&st); if(ret == -1) { perror("stat error\n"); return 1; } //当前处理大小 unsigned long current_size = 0; int i = 1; while(1) { //定义一个数组存放获取信息 char buf[1024] = {0}; char *ret = fgets(buf,1024,fd);//获取文件的一行 //文件退出条件 if(NULL == ret) { break; } current_size += strlen(buf); char *word = strtok(buf," ");//strtok函数,以空格为分割界限进行分割 //方法1 char *means = strtok(NULL,"\r"); /*方法2: char *means = strtok(NULL,"\n"); mean[strlen(mean)-1] = '\0'; */ char sql_cmd[1024]; while(*means == ' ') { ++means; } //插入记录 sprintf(sql_cmd,"insert into dict values (%d,\"%s\",\"%s\",datetime('now','+8 hours'));",i++,word,means);//数据库命令 int ret1 = sqlite3_exec(db,sql_cmd,NULL,NULL,&errmsg);//执行上述命令 if(SQLITE_OK != ret1) { fprintf(stderr,"sql_cmd error:%s\n",errmsg);//显示出错码 sqlite3_free(errmsg); return 1; } printf("当前进度:%lu,%lu",current_size,st.st_size); fflush(stdout); } sqlite3_close(db);//关闭数据库 close(fd);//关闭文件 return 0; }
- 点赞
- 收藏
- 分享
- 文章举报
相关文章推荐
- PHP读取TXT文件写入数据库
- PHP读取TXT文件写入数据库
- PHP读取TXT文件写入数据库
- 利用spring batch 读取数据库中的数据写入到txt文件中
- Python txt文件读取写入字典的方法(json、eval)
- PHP读取TXT文件写入数据库
- PHP读取TXT文件写入数据库
- asp.net(c#)如何读取上传过程中的.txt文件中的数据,并将其写入数据库的
- openFileDialog 打开TXT记事本文件写入数据库
- PHP读取TXT文件写入数据库
- PHP读取TXT文件写入数据库
- PHP 从数据库读取写入txt文件
- csv或者txt文件写入到数据库
- PHP读取TXT文件写入数据库
- PHP读取TXT文件写入数据库
- PHP读取TXT文件写入数据库
- PHP读取TXT文件写入数据库
- PHP读取TXT文件写入数据库
- PHP读取TXT文件写入数据库
- PHP读取TXT文件写入数据库