2016-12-25 40 views
-5

一个简单的配置文件和解析器我创建了一个配置文件,这样创建用C

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; 
     } 
+0

什么是配置文件的类型?文本文件? – DarkKnight

+1

请询问*特定*有关特定问题的问题。不要只指望我们为你写代码。 –

+0

你应该表现出一些努力。你试过什么了? – DarkKnight

回答

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)]; 
+0

我downvoting,因为问题是C语言,但你提出的解决方案是针对不同的语言。 –

+0

这个问题最初是用C#标题和标记的。所以我的回答是一个C#的答案。直到他发布实际的源代码之后,我才问到他实际意味着什么语言的问题。 –

+0

根据Rabid Penguin的评论,我已经删除了我的反对票。 –

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. 
+0

因为这个问题是针对C语言的,所以我是downvoting的,但是你提出的解决方案是针对不同的语言。 –

+0

@CiaranMcHale:如果你看过问题的编辑历史,这将是很有意义的。不是一个,但我们两个人在这里用c#写了答案。我希望这让你至少在投票前进行三次思考。如果你不知道SO的工作原理,请寻求帮助。这个问题是原创的C#标题和标签。 – DarkKnight

+1

我已将upvoted删除@Ciaran McHale的downvote。 DarkKnight是正确的,这个问题最初是标题为C#的标签。 –