プロファイル内のキー=値(key=val)文字列C言語解析


次のプロファイル(1.txt)があります.
#    “  ”      
#   “=” “:”      
# ①       '#'     
# ② “ ”              ,“ ”   
# ③ “ ” “ ”       、   (\t)	
# ③            


XYZ	=	89
abc	:	1233

Y	=	78888
N	=	111ABC	
M= ABC222
Name : Zhang_001
Mail: [email protected]		  
PosX:	 1900
PosY : 900
Data	= 7,999,000

解析プログラム(主にsscanf関数が使用されています):
#include <stdio.h>
#include <string.h>

//
//               
//
char *DelSpace(char *in);

//
// 【 】【 】      
//
typedef struct
{
	char key[50];
	char val[50];
}KEY_VAL;



void main()
{
	//      
	FILE *fp = fopen("1.txt", "r");
	if(!fp)
	{
		printf("        
"); return; } // 【 】【 】, KEY_VAL kv[100]; memset(kv, 0x00, sizeof(kv)); char tmp[100]; // // // // while (fgets(tmp, 100, fp)) { // if (tmp[0] == '#') continue; // if (tmp[0] == '
') continue; char key[50] = {0}; char val[50] = {0}; if (strstr(tmp, "="))//【key=val】 { sscanf(tmp, "%[0-9a-zA-Z\t ]=%s", key, val); } else if (strstr(tmp, ":"))//【key:val】 { sscanf(tmp, "%[0-9a-zA-Z\t ]:%s", key, val); } // 【key】【val】 char *k = DelSpace(key); char *v = DelSpace(val); // printf(" : %s\t = %s, = %s

", tmp, k, v); } fclose(fp); } // // // , // char *DelSpace(char *in) { char *out = NULL; char *p = in; while((*p == ' ')||(*p == '\t')) p++; // out = p; // while(1) // { if (*p == ' ') break; if (*p == '
') break; if (*p == '\0') break; if (*p == '\t') break; p++; } *p = '\0'; return out; }