免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4205 | 回复: 4
打印 上一主题 下一主题

[C] 提取下字符串中的值到SQLITE中相应的字段中,用C实现 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-05-28 00:16 |只看该作者 |倒序浏览
给大家添麻烦了,需求如下,感激不尽,可有偿:wink:

用正则表达式提取下字符串中的值到SQLITE中相应的字段中,用C实现。
“=” 左边的为字段名称,是需要写入到SQLITE数据库的字段名称,我已在SQLITE建立相应的字段;
“=”右边为字段值,要求写入到SQLITE数据库对应字段的值
源IP=192.168.1.101
目标IP=202.16.25.5
http.request.uri=/A55/request/Search.aspx
http.request.method=POST
action=undefined
NaviCode=*
PageName=ASP.brief_result_aspx
DbPrefix=CJFD
DbCatalog=某某某资料库
ConfigFile=CJFD.xml
db_opt=某某某资料库
db_value=某某某资料库
base_special1=%
magazine_special1=%
year_type=echar
au_1_sel=作者,中英文作者
au_1_sel2=机构
au_1_value2=首都师范大学



his=0
__=Tue May 27 2014 23:41:14 GMT+0800 (中国标准时间)
不需要做处理的内容:SEQ/ACK开始,[Decoded Data] 结束的内容,如:SEQ/ACK analysis,POST /A55/request/Search.a ×××××× %88%8,[Decoded Data]

------------------------------------------------分割线--------------------
192.168.1.101,202.16.25.5        Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Safari/537.36        /A55/request/Search.aspx        SEQ/ACK analysis,POST /A55/request/Search.a ×××××× %88%8,[Decoded Data]  (31),action=undefined,NaviCode=*,PageName=ASP.brief_result_aspx,DbPrefix=CJFD,DbCatalog=某某某资料库,ConfigFile=CJFD.xml,db_opt=某某某资料库,db_value=某某某资料库,base_special1=%,magazine_special1=%,year_type=echar,au_1_sel=作者,中英文作者,au_1_sel2=机构,au_1_value2=首都师范大学,au_1_special1==,au_1_special2=%,txt_1_sel=主题,txt_1_value1=社会主义,txt_1_value2=经济,txt_1_relation=#CNKI_AND,txt_1_special1==,txt_1_extension=xls,txt_2_sel=主题,txt_2_value1=意识形态,txt_2_value2=政治,txt_2_logical=or,txt_2_relation=#CNKI_AND,txt_2_special1==,txt_2_extension=xls,his=0,__=Tue May 27 2014 23:41:14 GMT+0800 (中国标准时间)
分割线下面是TXT文件中的一行文本,TXT文本中会有数千行乃至数万行类似的代码。

论坛徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16赛季CBA联赛之青岛
日期:2016-07-05 12:36:0515-16赛季CBA联赛之广东
日期:2016-06-29 11:45:542015亚冠之全北现代
日期:2015-07-22 08:09:472015年辞旧岁徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39狮子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技术图书徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
2 [报告]
发表于 2014-05-28 09:25 |只看该作者
话太多了,你直接说形如“au_1_sel=作者,中英文作者,txt_1_special1==,txt_1_extension=xls”
是不是想分解成
"au_1_sel" _________"作者,中英文作者"
"txt_1_special1"_____"="
"txt_1_extension"____"xls"


不会正则,纯C的要不要?
  1. #include <stdio.h>
  2. #include <string.h>

  3. int main()
  4. {
  5.     //const char* str = "192.168.1.101,202.16.25.5        Mozilla/5.0 (Windows NT 6.3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1750.117 Safari/537.36        /A55/request/Search.aspx        SEQ/ACK analysis,POST /A55/request/Search.a ×××××× %88%8,[Decoded Data]  (31),action=undefined,NaviCode=*,PageName=ASP.brief_result_aspx,DbPrefix=CJFD,DbCatalog=某某某资料库,ConfigFile=CJFD.xml,db_opt=某某某资料库,db_value=某某某资料库,base_special1=%,magazine_special1=%,year_type=echar,au_1_sel=作者,中英文作者,au_1_sel2=机构,au_1_value2=首都师范大学,au_1_special1==,au_1_special2=%,txt_1_sel=主题,txt_1_value1=社会主义,txt_1_value2=经济,txt_1_relation=#CNKI_AND,txt_1_special1==,txt_1_extension=xls,txt_2_sel=主题,txt_2_value1=意识形态,txt_2_value2=政治,txt_2_logical=or,txt_2_relation=#CNKI_AND,txt_2_special1==,txt_2_extension=xls,his=0,__=Tue May 27 2014 23:41:14 GMT+0800 (中国标准时间)";
  6.     const char* str = "SEQ/ACK [Decoded Data],a=b,c,d,e,f,g===h==i,j=,k=l";

  7.     // find the head
  8.     const char* p0;
  9.     {
  10.         p0 = strstr( str, "SEQ/ACK" );
  11.         if( p0 )
  12.             p0 = strstr( p0, "[Decoded Data]" );
  13.         if( p0 )
  14.             p0 = strchr( p0, ',' );
  15.         if( p0 )
  16.             ++p0;
  17.     }

  18.     while( p0 )
  19.     {
  20.         const char* p1 = strchr( p0, '=' );
  21.         if( !p1 ) break;

  22.         const char* p2 = strchr( p1+1, ',' );
  23.         if( !p2 )
  24.         {
  25.             printf( "\"%.*s\"\t=\t\"%s\"\n", (int)(p1-p0), p0, p1+1 );
  26.             break;
  27.         }

  28.         size_t idx;
  29.         for( ; idx=strcspn(p2+1,",="), (p2+1)[idx]==','; p2=p2+1+idx );
  30.         const char* p3 = p2+1+idx;
  31.         if( !*p3 )
  32.         {
  33.             printf( "\"%.*s\"\t=\t\"%s\"\n", (int)(p1-p0), p0, p1+1 );
  34.             break;
  35.         }
  36.         printf( "\"%.*s\"\t=\t\"%.*s\"\n", (int)(p1-p0), p0, (int)(p2-p1-1), p1+1 );

  37.         p0 = p2+1;
  38.     }

  39.     return 0;
  40. }
复制代码
输出为
"a"     =       "b,c,d,e,f"
"g"     =       "==h==i"
"j"     =       ""
"k"     =       "l"

论坛徽章:
44
15-16赛季CBA联赛之浙江
日期:2021-10-11 02:03:59程序设计版块每日发帖之星
日期:2016-07-02 06:20:0015-16赛季CBA联赛之新疆
日期:2016-04-25 10:55:452016科比退役纪念章
日期:2016-04-23 00:51:2315-16赛季CBA联赛之山东
日期:2016-04-17 12:00:2815-16赛季CBA联赛之福建
日期:2016-04-12 15:21:2915-16赛季CBA联赛之辽宁
日期:2016-03-24 21:38:2715-16赛季CBA联赛之福建
日期:2016-03-18 12:13:4015-16赛季CBA联赛之佛山
日期:2016-02-05 00:55:2015-16赛季CBA联赛之佛山
日期:2016-02-04 21:11:3615-16赛季CBA联赛之天津
日期:2016-11-02 00:33:1215-16赛季CBA联赛之浙江
日期:2017-01-13 01:31:49
3 [报告]
发表于 2014-05-28 09:48 |只看该作者
回复 2# bruceteen

想这种找人代做作业的,不开个价就贴代码可惜了

论坛徽章:
0
4 [报告]
发表于 2014-05-28 09:59 |只看该作者
回复 3# windoze

好久没用chinaunix这个帐号了,可以有偿,可以支付宝,呵呵,还有后续,再次感谢楼上!

   

论坛徽章:
0
5 [报告]
发表于 2014-05-28 10:00 |只看该作者
回复 2# bruceteen

好人啊好人!还有后续的开发,可以有偿 再次感谢!


   
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP