【问题标题】:Creating a simple configuration file and parser in C在 C 中创建一个简单的配置文件和解析器
【发布时间】:2017-05-10 03:18:09
【问题描述】:

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

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

【问题讨论】:

  • 配置文件的类型是什么?文本文件?
  • 请就具体问题提出具体问题。不要只期望我们为您编写代码。
  • 你应该表现出一些努力。到目前为止,您尝试过什么?
  • 没有意义吗?如何将配置设置加载到int 变量中?这是我的问题:很想知道。
  • 是的,它是一个文本文件。

标签: c file parsing configuration


【解决方案1】:

这个答案是用 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)];

【讨论】:

  • 我投了反对票,因为问题是针对 C 语言的,但您提出的解决方案是针对不同的语言的。
  • 该问题最初的标题和标记为 C#。所以我的答案是 C# 答案。直到他发布了实际的源代码,我才问了他的实际意思是什么语言的问题。
  • 根据 Rabid Penguin 的评论,我删除了我的反对票。
【解决方案2】:

假设您有包含配置条目的 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.

【讨论】:

  • 我投了反对票,因为问题是针对 C 语言的,但您提出的解决方案是针对不同的语言的。
  • @CiaranMcHale :如果您查看了问题的编辑历史,那将会很有意义。不是一个,而是我们两个在这里用 c# 写了答案。我希望这让你在投票之前至少三思而后行。如果您不知道 SO 的工作原理,请寻求帮助。这个问题最初是用 C# 命名和标记的。
  • 我赞成删除@Ciaran McHale 的反对票。 DarkKnight 是正确的,这个问题最初的标题和标签是 C#。
  • 根据 Rabid Penguin 的评论,我试图取消我的反对票,但 StackOverflow 不会让我这样做。显然,我的反对票是“锁定”。
猜你喜欢
  • 2011-10-17
  • 2014-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-31
  • 1970-01-01
相关资源
最近更新 更多