设为首页 加入收藏

TOP

C++编程之配置文件解析(二)
2016-12-31 08:14:41 】 浏览:770
Tags:编程 配置 文件 解析
parse_file(structini_parser*ini,constchar*file){ FILE*fp=fopen(file,"r"); if(fp) { structtag_value_pair*pair=0; charbuf[1024]={0}; while(fgets(buf,1024,fp)) { pair=parse_line(buf,strlen(buf)); if(pair) { ini->keyvalues->add(ini->keyvalues,pair); } } fclose(fp); returnini->keyvalues->size; } return-1; } staticint_parse_text(structini_parser*ini,constchar*text){ char*p=text; char*start=0; structtag_value_pair*pair=0; if(!text)return-1; while(1) { start=p; while(*p!='\n'&&*p!='\0')++p; if(*p=='\0')break; pair=parse_line(start,p-start); if(pair)ini->keyvalues->add(ini->keyvalues,pair); ++p; } returnini->keyvalues->size; } staticchar*_value(structini_parser*ini,constchar*key){ structtag_value_pair*pair=NODE_T(ini->keyvalues->find_by_key(ini->keyvalues,key),structtag_value_pair); if(pair)returnpair->szValue; return0; } staticvoid_set_value(structini_parser*ini,constchar*key,constchar*value){ structtag_value_pair*pair=NODE_T(ini->keyvalues->find_by_key(ini->keyvalues,key),structtag_value_pair); if(pair) { if(pair->szValue)free(pair->szValue); pair->szValue=strdup(value); } else { ini->keyvalues->add(ini->keyvalues,make_tag_value_pair(key,value)); } } staticvoid_remove(structini_parser*ini,constchar*key){ structtag_value_pair*pair=NODE_T(ini->keyvalues->find_by_key(ini->keyvalues,key),structtag_value_pair); if(pair)ini->keyvalues->remove(ini->keyvalues,pair); } staticvoidwrite_keyvalue(structtag_value_pair*pair,FILE*fp) { fputs(pair->szTag,fp); fputc('=',fp); fputs(pair->szValue,fp); fputc('\n',fp); } staticint_save_to_file(structini_parser*ini,constchar*file){ if(ini->keyvalues->size>0) { FILE*fp=fopen(file,"w"); if(fp) { structtag_value_pair*pair=NODE_T(ini->keyvalues->head,structtag_value_pair); while(pair!=0) { write_keyvalue(pair,fp); pair=NODE_T(pair->node.next,structtag_value_pair); } fclose(fp); return0; } } return-1; } staticvoid_delete_ini_parser(structini_parser*ini){ if(ini) { ini->keyvalues->deletor(ini->keyvalues); free(ini); } } structini_parser*new_ini_parser(){ structini_parser*ini=(structini_parser*)malloc(sizeof(structini_parser)); ini->keyvalues=new_tag_value_list(); ini->parse_file=_parse_file; ini->parse_string=_parse_text; ini->value=_value; ini->set_value=_set_value; ini->remove=_remove; ini->save_to_file=_save_to_file; ini->deletor=_delete_ini_parser; returnini; } 下面是简单的测试代码: view plaincopy 在CODE上查看代码片派生到我的代码片 staticchar*g_szIniString="#abc\nfirst=2\nsecond\nname=charlizhang\n"; staticvoidini_parser_test_string() { structini_parser*ini=new_ini_parser(); intsize=ini->parse_string(ini,g_szIniString); assert(size>0); assert(ini->value(ini,"second")==0); assert(ini->value(ini,"abc")==0); assert(ini->value(ini,"name")!=NULL); assert(ini->value(ini,"first")!=NULL); printf("inistring:%s\n",g_szIniString); printf("key-valuepairscount=%d\n",size); printf("key\'name\'',value=%s\n"
首页 上一页 1 2 3 下一页 尾页 2/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇请教关于总线错误(Bus error) 和 .. 下一篇数字组合问题

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目