首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

请问文本解析有关问题,sscanf相关

2012-08-09 
请教文本解析问题,sscanf相关数据源是一段审计日志,格式如下:typeSYSCALL msgaudit(07/13/2012 02:24:06

请教文本解析问题,sscanf相关
数据源是一段审计日志,格式如下:

type=SYSCALL msg=audit(07/13/2012 02:24:06.652:12319924) : arch=x86_64 syscall=write success=yes exit=35 a0=2 a1=7fff8df61060 a2=23 a3=7272652073656c75 items=0 ppid=4405 pid=4415 auid=root uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts14 ses=83 comm=auditctl exe=/sbin/auditctl subj=unconfined_u:system_r:auditctl_t:s0 key=(null)

sscanf可否实现将部分数据取出的功能,例如仅取出type,arch,uid,key这四项的内容。
似乎需要正则表达式,初次使用,先感谢各位的指点。

[解决办法]

C/C++ code
#include <stdio.h>#include <string.h>char s[] ="type=SYSCALL msg=audit(07/13/2012 02:24:06.652:12319924) : arch=x86_64 syscall=write success=yes exit=35 a0=2 a1=7fff8df61060 a2=23 a3=7272652073656c75 items=0 ppid=4405 pid=4415 auid=root uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts14 ses=83 comm=auditctl exe=/sbin/auditctl subj=unconfined_u:system_r:auditctl_t:s0 key=(null)";char *p,*q;char k[100],v[100];int n,i,j;int main() {    p=s;    while (1) {        if (2==sscanf(p,"%99[^=]=%99[^=]%n",k,v,&n)) {            i=strlen(v)-1;            j=0;            while (1) {                if (i<0) break;                if (' '==v[i]) {                    v[i]=0;                    break;                }                i--;                j++;            }            printf("%s=\"%s\"\n",k,v);            if (0==strcmp("type",k)) printf("---->FOUND: %s=\"%s\"\n",k,v);            if (0==strcmp("arch",k)) printf("---->FOUND: %s=\"%s\"\n",k,v);            if (0==strcmp("uid" ,k)) printf("---->FOUND: %s=\"%s\"\n",k,v);            if (0==strcmp("key" ,k)) printf("---->FOUND: %s=\"%s\"\n",k,v);            p+=n-j;        } else break;    }    return 0;}//type="SYSCALL"//---->FOUND: type="SYSCALL"//msg="audit(07/13/2012 02:24:06.652:12319924) :"//arch="x86_64"//---->FOUND: arch="x86_64"//syscall="write"//success="yes"//exit="35"//a0="2"//a1="7fff8df61060"//a2="23"//a3="7272652073656c75"//items="0"//ppid="4405"//pid="4415"//auid="root"//uid="root"//---->FOUND: uid="root"//gid="root"//euid="root"//suid="root"//fsuid="root"//egid="root"//sgid="root"//fsgid="root"//tty="pts14"//ses="83"//comm="auditctl"//exe="/sbin/auditctl"//subj="unconfined_u:system_r:auditctl_t:s0"//key="(null)"//---->FOUND: key="(null)" 

热点排行