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#的標籤。 –