在C中创建一个简单的配置文件和解析器

时间:2016-12-25 01:05:55

标签: c file parsing configuration

我创建了一个像这样的配置文件

smartphones = 50; laptops = 30; watches = 20;

当程序运行时,我希望它将配置设置加载到下面列出的程序变量中。

int smartphones, laptops, watches;

谢谢!

编辑: 我做了一个测试来解析配置文件中的文本。无论如何,我认为代码并不好。建议?

int count = 0; int flag = 0, more = 0; int sphones = 0, laptops=0, watches=0; `

     if((fp = fopen("filecfg.txt","r")) != NULL){while(fgets(bufr,MAXLINE,fp)!=NULL){
       `    count +=1;`
            if(flag==0){
                for (int k = 0; bufr[k] != '\0'; k++){
                    if (isdigit(bufr[k])){
                        if(more==1){
                            sphones *= 10;
                            sphones += bufr[k] - '0';   
                        } else {    
                            sphones = bufr[k] - '0'; 
                            more=1;
                        }
                    }   
              }
              flag = 1;
        }else if(flag==1){
            for (int k = 0; bufr[k] != '\0'; k++){
                if (isdigit(bufr[k])){
                    if(more==1){
                        laptops *= 10;
                        laptops += bufr[k] - '0';   
                    } else {    
                        laptops = bufr[k] - '0'; 
                        more=1;
                    }
                }   
            } 
            flag = 2;
        }else if(flag==2){
            for (int k = 0; bufr[k] != '\0'; k++){
                if (isdigit(bufr[k])){
                    if(more==1){
                        watches *= 10;
                        watches += bufr[k] - '0';   
                    } else {    
                        watches = bufr[k] - '0';
                        more=1;
                    }
                }
            }       
            flag = 3;   
        }

2 个答案:

答案 0 :(得分:2)

这个答案是在C#中留下来给后人留下的。问题的原始标题和标签是C#而不是C.

string config = File.ReadAllText("config_file");

var values = config.Split(";", StringSplitOptions.RemoveEmptyEntries);

var dict = new Dictionary<string, int>();
foreach(var value in values)
{
    var pair = value.Split("=",StringSplitOptions.RemoveEmptyEntries);
    var key = pair[0].Trim();
    var val = Convert.ToInt32(pair[1].Trim());
    dict[key] = val;
}

int smartphones = dict[nameof(smartphones)];

答案 1 :(得分:0)

假设您的配置条目中包含txt文件,您就是这样做的。

var configEntries = File.ReadAllLines("Path/To/YourFile");
int smartphones = int.Parse(configEntries.First(x=>x.Replace(";","")
                                                    .Contains("smartphones"))
                                                    .Split(' ')[1].Trim());
//Repeat same for other 2 variables.