zoukankan      html  css  js  c++  java
  • C语言解析日志,存储数据到伯克利DB 2

    #编译程序
    gcc -o historydb historydb.c -ldb
    
    #将2013年8月9日的用户记录写入数据库 (程序自动识别新用户入库,跳过老用户)
    ./historydb -f 20130809.userlist 20130809
    
    #查询guest1985215666654在2013年8月8日有没有访问业务bch2000
    ./historydb -s "bch2000 guest1985215666654" 20130808
    #include <assert.h>
    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <db.h>
    #include <sys/types.h>
    #include <getopt.h>
    
    #define DATABASE "/work/stat/read/newstat/test/history.db"
    
    struct ViewDate
    {
            int year;
            int month;
            int day;
    };
    
    struct ViewData {
            struct ViewDate date;
    };
    
    void setDate(struct ViewDate *date,char *s)
    {
            assert(s != NULL);
    
            char tmp[10]={0};
            strncpy(tmp,s,4);
            date->year = atoi(tmp);
    
            memset(tmp,0,10);
            strncpy(tmp,s+4,2);
            date->month = atoi(tmp);
    
            memset(tmp,0,10);
            strncpy(tmp,s+6,2);
            date->day = atoi(tmp);
    
            //printf("%d - %d - %d 
    ",date->year, date->month, date->day);
    }
    
    int compareViewData(struct ViewData *data , struct ViewData *storedData)
    {
            int dataArray [] = {data->date.year, data->date.month, data->date.day};
            int storedDataArray [] = {storedData->date.year, storedData->date.month, storedData->date.day};
    
            int i = 0;
            for(;i<sizeof(dataArray) / sizeof(int); i++)
            {
                    if(storedDataArray[i] > dataArray[i])
                    {
                            return 0;
                    }
            }
            return 1;
    }
    
    void printViewData(struct ViewData *data)
    {
            printf("print view data : %d - %d - %d 
    ",data->date.year, data->date.month, data->date.day);
    }
    
    char *trim(char *s)
    {
            int i = strlen(s);
            for(;i>0;i--)
            {
                    if(s[i]==' ' || s[i]=='
    ' || s[i]=='' || s[i]=='	')
                    {
                            s[i] = '';
                    }
                    else
                    {
                            break;
                    }
            }
            return s;
    }
    
    DB *openDb()
    {
            int ret;
            DB *dbp = NULL;
    
            ret = db_create(&dbp, NULL, 0);
            if(ret != 0)
            {
                    fprintf(stderr,"create Db error!
    ");
                    exit(1);
            }
    
            ret = dbp->open(dbp, NULL, DATABASE, NULL, DB_BTREE, DB_CREATE,0664);
    
            if(ret != 0)
            {
                    fprintf(stderr,"open Db error!
    ");
                    exit(1);
            }
    
            return dbp;
    }
    
    int saveViewInfo(DB *dbp, char *user, struct ViewData *data)
    {
            int ret;
            DBT key,saveData;
    
            memset(&key, 0, sizeof(key));
            memset(&saveData, 0, sizeof(saveData));
    
            key.data = user;
            key.size = strlen(user) + 1;
    
            saveData.data = data;
            saveData.size = sizeof(*data);
    
            if(findViewInfo(dbp, user, data)==1)
            {
                    //printf("already has %s 
    ", user);
                    return 1;
            }
    
            ret = dbp->put(dbp, NULL, &key, &saveData, 0);
    
            if(ret == 0)
            {
                    //printViewData(saveData.data);
                    return 1;
            }
            else
            {
                    //key storead failed
                    return 0;
            }
    }
    
    int findViewInfo(DB *dbp, char *user, struct ViewData *data)
    {
            int ret;
            DBT key, storedData;
    
            memset(&key, 0, sizeof(key));
            memset(&storedData, 0, sizeof(storedData));
    
            key.data = user;
            key.size = strlen(user) + 1;
    
            ret = dbp->get(dbp, NULL, &key, &storedData, 0);
    
            if(ret == 0 && compareViewData(data, (struct ViewData *)storedData.data)==1)
            {
                    //found user
                    return 1;
            }
    
            //not found
            return 0;
    
    }
    
    void saveViewFile(char *filename, struct ViewData *data)//20130815.save.ul
    {
            DB *dbp = openDb();
            char buffer[1024 * 4];
            FILE *fp = fopen(filename,"r");
            assert(fp != NULL);
    
            while(fgets((char*)buffer, 1024*4, fp)!=NULL)
            {
                    char *user = (char*)buffer;
                    saveViewInfo(dbp, trim(user), data);
                    memset(&buffer, 0, 1024 * 4); 
            }
            dbp->close(dbp, 0);
    }
    
    void hasViewInfo(char *user, struct ViewData *data)
    {
            DB *dbp = openDb();
            assert(user != NULL);
    
            user = trim(user);
            if(findViewInfo(dbp, user, data)==1)
            {
                    printf("found %s
    ",user);
            }
            else
            {
                    printf("not found %s
    ",user);
            }
    
            dbp->close(dbp, 0);
    }
    
    
    int main (int argc, char *argv[])
    {
            int oc;
            extern char *optarg;
            extern int optind, opterr, optopt;
    
            struct ViewData viewData;
            memset(&viewData, 0, sizeof(viewData));
    
            while((oc=getopt(argc,argv,"f:s:")) != -1)
            {
                    setDate(&viewData.date,argv[optind]);
                    switch(oc)
                    {
                            case 'f':
                                    saveViewFile(optarg, &viewData);
                                    break;
                            case 's':
                                    hasViewInfo(optarg, &viewData);
                                    break;
                    }
            }
    
            return 0;
    }
  • 相关阅读:
    从零开始学习Sencha Touch MVC应用之二
    PHPMailer IIS下的PHP脚本使用GMAIL发送邮件PHP
    php群发邮件
    PHP编辑器
    PHP使用GET传输汉字的编码转换
    转一个手机开发的帖子(来自开发者俱乐部)
    Zend_Mail收发smtp(gmail,163)邮件Zend Framework
    just a simple for a mail() amd get array()
    ecshop二次开发 结构分析和代码研究 呵呵
    如何重置Drupal 7的用户密码
  • 原文地址:https://www.cnblogs.com/code-style/p/3268406.html
Copyright © 2011-2022 走看看