zoukankan      html  css  js  c++  java
  • C解析config

    #cat bb.c
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include <assert.h>
    #include <errno.h>
    
    #define KEYVALLEN 100
    
    /*   Delete left side blank   */
    char * l_trim(char * szOutput, const char *szInput)
    {
    	assert(szInput != NULL);
    	assert(szOutput != NULL);
    	assert(szOutput != szInput);
    	for(NULL; *szInput != '' && isspace(*szInput); ++szInput){
    		;
    	}
    	return strcpy(szOutput, szInput);
    }
    
    /*   Delete right side blank   */
    char *r_trim(char *szOutput, const char *szInput)
    {
    	char *p = NULL;
    	assert(szInput != NULL);
    	assert(szOutput != NULL);
    	assert(szOutput != szInput);
    	strcpy(szOutput, szInput);
    	for(p = szOutput + strlen(szOutput) - 1; p >= szOutput && isspace(*p); --p){
    		;
    	}
    	*(++p) = ''  ;
    	return szOutput;
    }
    
    /*   Delete both side blank   */
    char * a_trim(char * szOutput, const char * szInput)
    {
    	char *p = NULL;
    	assert(szInput != NULL);
    	assert(szOutput != NULL);
    	l_trim(szOutput, szInput);
    	for (p = szOutput + strlen(szOutput) - 1;p >= szOutput && isspace(*p); --p){
    		;
    	}
    	*(++p) = '';
    	return szOutput;
    }
    
    
    int GetProfileString(char *profile, char *AppName, char *KeyName, char *KeyVal )
    {
    	char appname[32],keyname[32];
    	char *buf,*c;
    	char buf_i[KEYVALLEN], buf_o[KEYVALLEN];
    	FILE *fp;
    	int found=0;   /* 1 AppName 2 KeyName */
    	if((fp=fopen( profile, "r"))==NULL){
    	printf("openfile [%s] error [%s]
    ", profile, strerror(errno));
    		return(-1);
    	}
    	fseek(fp, 0, SEEK_SET );
    	memset(appname, 0, sizeof(appname) );
    	sprintf(appname, "[%s]", AppName );
    
    	while(! feof(fp) && fgets( buf_i, KEYVALLEN, fp )!=NULL){
    		l_trim(buf_o, buf_i);
    		if( strlen(buf_o) <= 0 )
    			continue  ;
    		buf = NULL;
    		buf = buf_o;
    
    		if(found == 0){
    			if( buf[0] != '[' ) {
    				continue  ;
    			} else if (strncmp(buf,appname, strlen(appname))==0){
    				found = 1;
    				continue;
    			}
    
    		} else if( found == 1 ) {
    			if (buf[0] == '#') {
    				continue  ;
    			} else if ( buf[0] == '[' ) {
    				break;
    			} else {
    				if( (c = (char *) strchr(buf, '=')) == NULL )
    					continue  ;
    				memset( keyname, 0, sizeof(keyname) );
    
    				sscanf(buf, "%[^=|^ |^	]", keyname);
    				if(strcmp(keyname, KeyName) == 0 ) {
    					sscanf( ++c, "%[^
    ]", KeyVal);
    					char *KeyVal_o = (char *) malloc(strlen (KeyVal) + 1);
    					if(KeyVal_o != NULL) {
    						memset(KeyVal_o, 0, sizeof(KeyVal_o));
    						a_trim(KeyVal_o, KeyVal);
    					if(KeyVal_o && strlen(KeyVal_o) > 0)
    						strcpy(KeyVal, KeyVal_o);
    						free(KeyVal_o);
    						KeyVal_o = NULL;
    					}
    					found = 2;
    					break;
    				} else {
    					continue  ;
    				}
    			}
    		}
     	}
    	fclose (fp);
    	if (found == 2 )
    		return(0);
    	else
    		return(-1);
    }
    
    void main()
    {
    	char ip[16];
    	char dev[10];
    	GetProfileString("./bb.txt", "cls_server", "ip", ip);
    	GetProfileString("./bb.txt", "device", "dev", dev);
    	printf("%s
    ", ip);
    	printf("%s
    ", dev);
    }
    
    
    #cat bb.txt
    [cls_server]
    #配置文件等号左右可以有空格也可以没有
    ip=192.16.31.2
    
    [device]
    dev=sda
    
  • 相关阅读:
    [luogu P2184] 贪婪大陆 [树状数组][线段树]
    luogu P3373 【模板】线段树 2
    [luogu P3384] 【模板】树链剖分 [树链剖分]
    树链剖分膜版
    AtCoder Grand Contest 026F
    AtCoder Regular Contest 091F
    AtCoder Regular Contest 099F
    AtCoder Grand Contest 027D
    向量叉积分配律简单证明
    LOJ 538. 「LibreOJ NOIP Round #1」数列递推(找规律+结论)
  • 原文地址:https://www.cnblogs.com/muahao/p/8195218.html
Copyright © 2011-2022 走看看