2016-12-25 4 views
-5

Я создал конфигурационный файл, как этотСоздание простой файл конфигурации и парсер C

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

при запуске программы, я хотел бы, чтобы загрузить параметры конфигурации в программах переменных, перечисленных ниже.

int smartphones, laptops, watches;

Спасибо!

EDIT: Существует тест, который я сделал для анализа текста в файле конфигурации. В любом случае, я думаю, что код не очень хорош. Предложения?

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

. Я стараюсь, потому что вопрос был для языка C, но ваше предлагаемое решение предназначено для другого языка. –

+0

Вопрос был изначально назван и помечен C#. Таким образом, мой ответ был ответом на C#. Только когда он опубликовал фактический исходный код, я задал вопрос о том, на каком языке он на самом деле имел в виду. –

+0

Я удалил свой голос, основываясь на комментарии Рабида Пингвина. –

0

Если у вас есть текстовый файл с вашими записями конфигурации, это то, как вы это делаете.

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, но ваше предлагаемое решение предназначено для другого языка. –

+0

@CiaranMcHale: Это имело бы смысл, если бы вы взглянули на историю изменений вопроса. Не один, но двое из нас здесь ответили в C#. Хотелось бы, чтобы вы заставили вас подумать дважды, по крайней мере, до того, как вы отступили. Попросите помощи, если вы не знаете, как работает SO. ВОПРОС БЫЛ ИЗВЕСТНЫМИ И ОБРАЩАЕТСЯ С C# ОРИГИНАЛЬНО. – DarkKnight

+1

Я уклонился, чтобы удалить downvote @Ciaran McHale. DarkKnight верен, и этот вопрос изначально был назван и помечен C#. –

Смежные вопросы