首先搭建数据库框架,再打开要存入的文件,这边用的是英语四级常用单词词典
#include <stdio.h>
#include <sqlite3.h>
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
int main(int argc, const char *argv[])
{
//打开数据库
sqlite3* db = NULL;
if(sqlite3_open("./my.db", &db) != SQLITE_OK)
{
printf("err_code:%d\n", sqlite3_errcode(db)); //两种判错方式,任选其一
printf("errmsg:%s\n", sqlite3_errmsg(db));
fprintf(stderr, "__%d__ sqlite3_open failed\n", __LINE__);
return -1;
}
printf("数据库打开成功\n");
//打开文件
int fd = open("./dict.txt", O_RDONLY); //只读打开
//创建数据库表格
char* sql = "create table if not exists engdic (word char, mean char);" ;//单词与单词意思
char* errmsg = NULL;
if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
{
fprintf(stderr, "__%d__ sqlite3_exec:%s\n", __LINE__, errmsg);
return -1;
}
//功能段--------------------------------------------------------------
//--------------------------------------------------------------------
//关闭数据库
if(sqlite3_close(db) != SQLITE_OK)
{
printf("err_code:%d\n", sqlite3_errcode(db));
printf("errmsg:%s\n", sqlite3_errmsg(db));
fprintf(stderr, "__%d__ sqlite3_close failed\n", __LINE__);
return -1;
}
printf("数据库成功关闭\n");
//关闭文件
close(fd);
return 0;
}
要注意的点不多
1:有部分特殊单词,如mass media,虽然单词中间有空格,但是其实是一个单词
2:o'clock,此单词不能用单引号,要用双引号包裹
我采取一个一个取的方法
char c;
char word[30] = ""; //存单词
char mean[60] = ""; //存翻译
char buf[128] = ""; //存入全部
int flag = 0;
ssize_t res = 0;
while(1)
{
//单词提取循环
while(1)
{
res = read(fd, &c, 1);
if(res == 0) //读完以后退出
break;
if(' ' == c) //监测到空格,flag++;
{
flag++;
}else //如果空格的后一位不是空格,重置flag
{
flag = 0;
}
if(flag > 1) //超过两个空格了
{
word[strlen(word)-2] = '\0'; //把之前输入的空格换成'\0'
break; //进入下一个中文循环
}
strcat(word, &c); //存入数组
}
//中文翻译循环
while(1)
{
res = read(fd, &c, 1);
if(res == 0) //读完以后退出
break;
if(flag>1 && ' '==c) //跳过单词和翻译中间的多余空格
continue;
else
flag = 0; //当c不再是空格时,重置flag,并开始装填
strcat(mean, &c);
if(c == '\n') //取完这一行,跳出循环,重新开始取单词
break;
}
//当代码运行到此处时,word与mean已经填充完成一行单词
//填充入数据库,并清空字符串
//装填入buf字符串数组
if(word[0] == '\0') //若没有读出数据,退出
break;
sprintf(buf, "insert into engdic values(\"%s\", '%s');",word, mean);
//存入数据库
char* errmsg = NULL;
if(sqlite3_exec(db, buf, NULL, NULL, &errmsg) != SQLITE_OK)
{
fprintf(stderr, "__%d__ sqlite3_exec:%s\n", __LINE__, errmsg);
return -1;
}
//清空buf,word,mean
bzero(buf, sizeof(buf));
bzero(word, sizeof(word));
bzero(mean, sizeof(mean));
}