作业:将dict.txt中的内容导入到数据库中
注意:
导入后检查解释意思是否完整,双词性
中间有空格的单词
o'clock
#include<stdio.h>
#include<sqlite3.h>
#include <stdlib.h>
#include <string.h>
int do_insert(sqlite3 *db,FILE *fp)
{
int flag=0,i=0,j=0,k=0;
char get;
char word[128]="";
char partofspeech[50]="";
size_t res=-1;
printf("正在进行输入\n");
while(1)
{
i=0;j=1;k=0;
bzero(word,sizeof(word));
bzero(partofspeech,sizeof(partofspeech));
if(flag==0)
{
while(1)
{
res=fread(&get,1,1,fp);
if(res==0)
break;
word[i]=get;
i++;
if(get==' ')
break;
}
}
if(res==0)
break;
while(1)
{
fread(&get,1,1,fp);
partofspeech[0]=get;
if(get!=' ')
break;
}
//判断空格后的字符串到后一个空格前有没有.
while(1)
{
fread(&get,1,1,fp);
if(get=='.')
{
flag=2;
break;
}
else if(get==' ')
{
flag=1;
break;
}
partofspeech[j]=get;
}
if(flag==1)
{
j=1;
strcat(word,partofspeech);
while(1)
{
fread(&get,1,1,fp);
if(get!=' ')
break;
}
partofspeech[0]=get;
while(1)
{
fread(&get,1,1,fp);
if(get=='\n')
{
flag=0;
break;
}
partofspeech[j]=get;
}
}
if(flag==2)
{
partofspeech[j]=get;
j++;
while(1)
{
fread(&get,1,1,fp);
if(get=='\n')
{
flag=0;
break;
}
partofspeech[j]=get;
j++;
}
}
char sql[128]="";
sprintf(sql,"INSERT INTO cidian VALUES(\"%s\",'%s');",word,partofspeech);
char *errmsg=NULL;
if(sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK)
{
fprintf(stderr, "__%d__ sqlite3_exec:%s\n", __LINE__, errmsg);
return -1;
}
}
return 0;
}
int main(int argc, const char *argv[])
{
//打开数据库
sqlite3*db=NULL;
if(sqlite3_open("./cidian.db",&db)!=SQLITE_OK)
{
printf("err_code:%d\n",sqlite3_errcode(db));
printf("errmsg:%s\n",sqlite3_errmsg(db));
fprintf(stderr,"sqlite3_open failed\n");
return -1;
}
printf("sqlite3_open success\n");
char* sql = "create table if not exists cidian (word char, partofspeech 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;
}
printf("create table success\n");
FILE * fp=fopen("./dict.txt","r");
if(NULL==fp)
{
perror("fopen");
return -1;
}
printf("打开词典成功\n");
do_insert(db,fp);
//关闭数据库
if(sqlite3_close(db)!=SQLITE_OK)
{
printf("err_code:%d\n",sqlite3_errcode(db));
printf("errmsg:%s\n",sqlite3_errmsg(db));
fprintf(stderr,"sqlite3_open failed\n");
return -1;
}
printf("sqlite3_close success\n");
fclose(fp);
return 0;
}