プロファイル内のキー=値(key=val)文字列C言語解析
次のプロファイル(1.txt)があります.
解析プログラム(主にsscanf関数が使用されています):
# “ ”
# “=” “:”
# ① '#'
# ② “ ” ,“ ”
# ③ “ ” “ ” 、 (\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;
}