免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: SoforthHe
打印 上一主题 下一主题

ini文件解析器 [复制链接]

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
11 [报告]
发表于 2011-11-26 15:17 |只看该作者
#include "list.h" 呢?

一堆的编译错误,通不过啊。

论坛徽章:
0
12 [报告]
发表于 2011-11-26 16:05 |只看该作者
本帖最后由 AD8018 于 2011-11-26 16:06 编辑

楼主非常用功,很不错,赞!

另外建议楼主用语法解析器来做,
争取早日从这种苦逼的要死的境地走出来。

AD以前也这么苦逼过,还写过不少苦逼代码,感觉浪费了很多的脑力。

这是一个用C++ spirit库实现的解析INI的代码:
http://www.codeproject.com/KB/tips/ini_file_parser_spirit.aspx

定义规则,出结果,十分的一目了然。

  1.         rule<> char_ident_start = alpha_p | ch_p('_') ;
  2.         rule<> char_ident_middle = alnum_p | ch_p('_') ;
  3.         rule<> ident = char_ident_start >> * char_ident_middle ;
  4.         rule<> char_start_comment = ch_p('#') | ch_p(';') | str_p("//");
  5.         rule<> blanks_p = * blank_p;
  6.         rule<> value_p = * ( alnum_p | blank_p | punct_p );
  7.        
  8.         rule<> l_category =
  9.                                         blanks_p >>
  10.                                         ch_p('[') >>
  11.                                         blanks_p >>
  12.                                         ident [ addCategory ] >>
  13.                                         blanks_p >>
  14.                                         ch_p(']') >>
  15.                                         blanks_p >>
  16.                                         eol_p
  17.         ;
  18.        
  19.         rule<> l_comment = blanks_p >> char_start_comment >> * print_p >> eol_p;
  20.         rule<> l_empty = blanks_p >> eol_p;
  21.         rule<> c_comment_rule = confix_p("/*", *anychar_p, "*/");

  22.         rule<> b_comment =
  23.                                         blanks_p >>
  24.                                         c_comment_rule >>
  25.                                         blanks_p >>
  26.                                         eol_p
  27.         ;

  28.         rule<> l_entry =  
  29.                                         blanks_p >>
  30.                                         ident [ addName ] >>
  31.                                         blanks_p >>
  32.                                         ch_p('=') >>
  33.                                         blanks_p >>
  34.                                         value_p [ addValue ] >>
  35.                                         blanks_p >>
  36.                                         eol_p
  37.         ;

  38.         rule<> lines = l_comment | b_comment | l_category | l_entry | l_empty;
  39.         rule<> ini_file =  lexeme_d [ * lines ] ;

  40.         file_data.clear();
  41.        
  42.         int errcode = parse(buffer, ini_file).full;
复制代码

论坛徽章:
0
13 [报告]
发表于 2011-11-26 17:12 |只看该作者
顶!俺也写过类似的,C

论坛徽章:
0
14 [报告]
发表于 2011-11-27 00:17 |只看该作者
本帖最后由 SoforthHe 于 2011-11-27 00:27 编辑

回复 11# snow888


  list.h不是我写的'这个直接从网上下载

论坛徽章:
0
15 [报告]
发表于 2011-11-27 00:26 |只看该作者
本帖最后由 SoforthHe 于 2011-11-27 00:33 编辑
楼主非常用功,很不错,赞!

另外建议楼主用语法解析器来做,
争取早日从这种苦逼的要死的境地走出来。 ...
AD8018 发表于 2011-11-26 16:05

叹服'话说c++太复杂了各种库'用得少
刚刚查了下'又见boost库,的却万能啊

论坛徽章:
0
16 [报告]
发表于 2011-11-27 00:34 |只看该作者
回复 13# dn2010


    谢谢支持'!!

论坛徽章:
0
17 [报告]
发表于 2011-11-27 00:35 |只看该作者
ini 没什么用途

论坛徽章:
0
18 [报告]
发表于 2011-11-27 00:37 |只看该作者
回复 12# AD8018


    说到我心坎去了'有时候一个问题有多种方案'现有方案只解决部分问题'不得以重新造轮子'悲催啊

论坛徽章:
0
19 [报告]
发表于 2011-11-27 00:44 |只看该作者
本帖最后由 SoforthHe 于 2011-11-27 00:48 编辑

[quote
web0746 发表于 2011-11-27 00:35 [/quot]

同学'你可以绕道
话说灵感来自windows的reg文件'估计你没听说过'
另外'愚以为ini很简洁'简单就是美'复杂的东西整不来'也不想整

论坛徽章:
0
20 [报告]
发表于 2011-11-27 10:27 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP