设为首页 加入收藏

TOP

纯C语言INI文件解析(二)
2014-11-23 20:25:07 来源: 作者: 【 】 浏览:7
Tags:语言 INI 文件 解析
alues->remove(ini->keyvalues, pair); } static void write_keyvalue(struct tag_value_pair * pair, FILE *fp) { fputs(pair->szTag, fp); fputc('=', fp); fputs(pair->szValue, fp); fputc('\n', fp); } static int _save_to_file(struct ini_parser * ini, const char * file){ if(ini->keyvalues->size > 0) { FILE * fp = fopen(file, "w"); if(fp) { struct tag_value_pair * pair = ini->keyvalues->head; while(pair != ini->keyvalues->tail) { write_keyvalue(pair, fp); pair = pair->next; } if(pair)write_keyvalue(pair, fp); fclose(fp); return 0; } } return -1; } struct ini_parser * new_ini_parser(){ struct ini_parser * ini = (struct ini_parser*)malloc(sizeof(struct ini_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; return ini; } void delete_ini_parser(struct ini_parser *ini){ if(ini) { delete_tag_value_list(ini->keyvalues); free(ini); } }
测试代码:

#include "util/ini_parser.h"
#include "ini_test.h"
#include 
  
   
#include 
   
     static char * g_szIniString = "#abc\nfirst=2\nsecond\nname=charli zhang \n"; static void ini_parser_test_string() { struct ini_parser * ini = new_ini_parser(); int size = 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("ini string: %s\n", g_szIniString); printf("key-value pairs count = %d\n", size); printf("key \'name\'', value = %s\n", ini->value(ini, "name")); printf("key \'first\'', value = %s\n", ini->value(ini, "first")); ini->set_value(ini, "baidu", "hahaha"); ini->save_to_file(ini, "write.conf"); ini->remove(ini, "first"); ini->save_to_file(ini, "write2.conf"); delete_ini_parser(ini); } static void ini_parser_test_file() { struct ini_parser * ini = new_ini_parser(); int size = ini->parse_file(ini, "test.conf"); 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("ini string: %s\n", g_szIniString); printf("key-value pairs count = %d\n", size); printf("key \'name\'', value = %s\n", ini->value(ini, "name")); printf("key \'first\'', value = %s\n", ini->value(ini, "first")); printf("key \'baidu\'', value = %s\n", ini->value(ini, "baidu")); delete_ini_parser(ini); } void ini_parser_test() { ini_parser_test_string(); ini_parser_test_file(); } 
   
  

测试了解析字符串、文件、增、删、写文件,都没什么大问题。


首页 上一页 1 2 下一页 尾页 2/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇纯C语言:检索与周游广度遍历源码 下一篇纯C语言:检索与周游广度深度遍历..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: