2008. 2. 27. 17:11
환경설정파일 파싱 삽질예방/간단한 파싱2008. 2. 27. 17:11
가장 간단한 형태로, #으로 주석처리가 가능하다.
환경설정파일로 부터 원하는 것을 파싱.
assert로 예외처리하는 스킬도 엿보임 ;)
<env_var.conf>
다음은 이를 읽어들이는 함수..
ret != 1조건은 비어있는 라인이 들어올 경우를 대비한다
환경설정파일로 부터 원하는 것을 파싱.
assert로 예외처리하는 스킬도 엿보임 ;)
<env_var.conf>
#### env_var.conf
ALPHA 15 #alsdfjalsdfj
BETA 1
K 20
GAMMA 0.032
NUM_OF_THREAD 2
#MAX_NUM_OF_THREAD 4
ALPHA 15 #alsdfjalsdfj
BETA 1
K 20
GAMMA 0.032
NUM_OF_THREAD 2
#MAX_NUM_OF_THREAD 4
다음은 이를 읽어들이는 함수..
ret != 1조건은 비어있는 라인이 들어올 경우를 대비한다
int ReadEnvVarsFromFile()
{
char buf[1000];
char varName[100];
FILE* envFile;
int ret;
envFile = fopen(ENV_VAR_FILE_NAME, "r");
while (NULL != fgets(buf, 1000, envFile)) {
ret = sscanf(buf, "%s", varName);
if (varName[0] == '#' || ret != 1)
continue;
if (0 == strcmp(varName, "ALPHA")) {
sscanf(buf, "%s %d", varName, &ALPHA);
printf("%s=%d ", varName, ALPHA);
}
else if (0 == strcmp(varName, "BETA")) {
sscanf(buf, "%s %d", varName, &BETA);
printf("%s=%d ", varName, BETA);
}
else if (0 == strcmp(varName, "K")) {
sscanf(buf, "%s %d", varName, &K);
assert(K <= MAX_K);
printf("%s=%d ", varName, K);
}
else if (0 == strcmp(varName, "GAMMA")) {
sscanf(buf, "%s %lf", varName, &GAMMA);
printf("%s=%lf ", varName, GAMMA);
}
else if (0 == strcmp(varName, "NUM_OF_THREAD")) {
sscanf(buf, "%s %d", varName, &NUM_OF_THREAD);
assert(NUM_OF_THREAD <= MAX_NUM_OF_THREAD);
printf("%s=%d ", varName, NUM_OF_THREAD);
}
else
assert(NULL == "Unknown variable name");
}
fclose(envFile);
return 0;
}
{
char buf[1000];
char varName[100];
FILE* envFile;
int ret;
envFile = fopen(ENV_VAR_FILE_NAME, "r");
while (NULL != fgets(buf, 1000, envFile)) {
ret = sscanf(buf, "%s", varName);
if (varName[0] == '#' || ret != 1)
continue;
if (0 == strcmp(varName, "ALPHA")) {
sscanf(buf, "%s %d", varName, &ALPHA);
printf("%s=%d ", varName, ALPHA);
}
else if (0 == strcmp(varName, "BETA")) {
sscanf(buf, "%s %d", varName, &BETA);
printf("%s=%d ", varName, BETA);
}
else if (0 == strcmp(varName, "K")) {
sscanf(buf, "%s %d", varName, &K);
assert(K <= MAX_K);
printf("%s=%d ", varName, K);
}
else if (0 == strcmp(varName, "GAMMA")) {
sscanf(buf, "%s %lf", varName, &GAMMA);
printf("%s=%lf ", varName, GAMMA);
}
else if (0 == strcmp(varName, "NUM_OF_THREAD")) {
sscanf(buf, "%s %d", varName, &NUM_OF_THREAD);
assert(NUM_OF_THREAD <= MAX_NUM_OF_THREAD);
printf("%s=%d ", varName, NUM_OF_THREAD);
}
else
assert(NULL == "Unknown variable name");
}
fclose(envFile);
return 0;
}