iniparser解析文件说明。

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

iniparser解析⽂件说明。

在⼯作中需要解析⼀些配置⽂件,⽽我解析的是 .ini ⽂件。

基本格式为
[字段名]
Value=12
下⾯是我⾃⼰写的⼀个解析⽂件源码
#include <stdio.h>
#include <string.h>
#define FILE_PATH "Volume.ini"
#define GET_FIELD_STATE_ON 1
#define GET_FIELD_STATE_OFF 0
#define GET_WORD_STATE_ON 1
#define GET_WORD_STATE_OFF 0
#define GET_VALUE_STATE_ON 1
#define GET_VALUE_STATE_OFF 0
#define GET_SYMBOL_STATE_ON 1
#define GET_SYMBOL_STATE_OFF 0
int iniGetValue(const char* fieldName , const char* wordName)
{
FILE *fp;
char c; //获取的字符
char strName[20] = {0};
int fieldFlag = 0;
int wordFlag = 0;
int valueFlag = 0;
int symbolFlag = 0;
int num = 0;
int i = 0;
fp = fopen (FILE_PATH,"r");
if (fp == NULL)
{
return -1;
}
while( 1 )
{
c = fgetc(fp);
if(feof(fp))
{
break;
}
//获取数值
if (valueFlag == GET_VALUE_STATE_ON && c == '-')
{
symbolFlag = GET_SYMBOL_STATE_ON;
}
if (c == '\n' && valueFlag== GET_VALUE_STATE_ON && symbolFlag == GET_SYMBOL_STATE_ON)
{
num = 0 - num;
symbolFlag = GET_SYMBOL_STATE_OFF;
}
if (c == '\n' && valueFlag == GET_VALUE_STATE_ON)
{
break;
}
if(c >= '0' && c <= '9' && valueFlag == GET_VALUE_STATE_ON )
{
num = num * 10 + c - '0';
}
//配对字
if (c == '=' && wordFlag == GET_WORD_STATE_ON)
{
if (strcmp (strName, wordName)==0)
{
wordFlag = GET_WORD_STATE_OFF;
valueFlag = GET_VALUE_STATE_ON;
}
//memset(strName ,0 ,sizeof(strName));
//i = 0;
}
if (wordFlag == GET_WORD_STATE_ON && (c != '' || c != '\n'))
{
strName[i] = c;
i++;
}
if(c == '\n')
{
memset(strName ,0 ,sizeof(strName));
i = 0;
}
//配对字段 getFieldName(c, strName);
if(c == ']' && fieldFlag == GET_FIELD_STATE_ON )
{
if (strcmp (strName, fieldName)==0)
{
wordFlag = GET_WORD_STATE_ON;
}
fieldFlag = GET_FIELD_STATE_OFF;
// memset(strName ,0 ,sizeof(strName));
// i = 0;
}
if(fieldFlag == GET_FIELD_STATE_ON )
{
strName[i] = c;
i ++;
}
if (c == '[' && fieldFlag == GET_FIELD_STATE_OFF)
{
fieldFlag = GET_FIELD_STATE_ON;
continue;
}
}
fclose(fp);
return num;
}
int main()
{
int num = 0;
num = iniGetValue("DTV", "Volume10");
printf("%d\n", num);
return0;
}
⽐较繁琐局限也很⼤但总的来说实现了⼗进制整型的解析条件。

后使⽤⽹上提供的⼀些免费的解析库⽂件 iniparser.c完成任务。

相关文档
最新文档