Форум программистов, компьютерный форум CyberForum.ru

Конфигурационный файл - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Задача на С++ http://www.cyberforum.ru/cpp-beginners/thread394132.html
Вот щас сижу смотрю на эту задачу и понимаю, что нехер было в выходные балду пинать ибо до завтро я ее точно не осилю, видимо слишком тяжело для меня изучение языка С. Вот решил обратиться к вам за помощью добрые люд, быть может для кого-то не составит труда решить следующею задачку: Дана матрица А(5,4) 1.Найти новый одномерный массив В из сумм эл-в каждой строки матрицы А. 2.Найти мах-й...
C++ Слова кончающееся на букву d нужно вывести все слова, которые кончаются на букву d int j,a,x;int i=0; char s,s1; cin.getline(s,255); while(s!='\0'){a=0; while(s==' ') i++;a=0; if(s!=' ') {while(s!=' ') {i++;a++; http://www.cyberforum.ru/cpp-beginners/thread394131.html
Цикл while, пару несложных вопросов C++
Есть у меня две блок-схемы по ним надо написать программу в первой у меня идёт цикл while, "если да" то выполняется два оператора присваивания, "если нет" то другой оператор присваивания Мне интересно как можно записать в цикле while "если нет"? "если да" я знаю например: while (a>b) { a=3b+c; // если да то вот два оператора 4b=6c; }
Работа с текстом. Подсчитать количество слов, имеющих удвоенные сочетания букв. C++
Подсчитать, сколько слов в тексте имеют удвоенные сочетания букв.(код без массивов) Иван Аганин, Правила2.3. Создавайте темы с осмысленными и понятными названиями - это серьезно повышает шансы, что на ваш вопрос ответят.Изначальное название темы: "работа с текстом".
C++ Шаблоны функций. http://www.cyberforum.ru/cpp-beginners/thread394098.html
Написать шаблон функции, осуществляющей обработку линейного массива. Тип и размер массива передаются как параметры шаблона ( <class T, int n>, где T – тип элементов линейного массива, а n – число его элементов). Задание: Заменить все четные по модулю числа средним арифметическим отрицательных элементов. На си ++. Добавлено через 5 часов 12 минут #include <iostream> #include <cstdlib> ...
C++ Программа на С Помогите написать программу на С подробнее

Показать сообщение отдельно
Antisymmetrizer
1 / 1 / 0
Регистрация: 10.05.2010
Сообщений: 22
28.11.2011, 21:15  [ТС]     Конфигурационный файл
Нашёл вот такой вот код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
/*
*вспомагательная функция
*возвращает номер символа в строке, следующего после запятой
*или ноль, если встретит символ коментария
*
*входные параметры:
* str - строка, в которой происходит сканирование
* nom - номер элемента, начиная с которого нужно производить поиск
*
*возвращаемое значение - номер символа, ПОСЛЕ которого стоит запятая
*
*/
int get_parm_offset(char * str,int nom)
{
while((str[nom]!=',')&&(str[nom]!=';')&&(str[nom]!='\0')) nom++;
if((str[nom]==';')||(str[nom]=='\0')) return 0;
return(++nom);
}
 
/*
*функция conv_string() позволяет конвертировать
*переданные ей параметры из текстового вида в целочисленные.
*входные параметры:
* str - параметр-строка
*выходные параметры:
* save_buffer - буфер интеджеров ,куда следует сохранить параметр(ы)
*
*возвращаемое значение - количество элементов, помещенных в буфер - НЕ БАЙТ!!!
*/
int conv_string(char *str,int *save_buffer)
{
int nom=0; /*номер следующего символа после запятой в строке-параметре*/
int count=0;
 
/*save first elem. from the string*/
if(sscanf(str,"%d,",&save_buffer[count])>0) count++;
 
while ((nom=get_parm_offset(str,nom))!=0)
sscanf(str+nom,"%d,",&save_buffer[count++]);
 
return count;
}
 
 
/*
*функция read_sec_parm() позволяет прочесть
*заданный параметр секции
*из заданного конфигурационного файла
*
*входные параметры:
* filename - имя файла
* sect_num - имя секции
* parm_name - имя параметра
*выходные:
* save_buffer - буфер,куда следует сохранить параметр
* save_size - его длина
*возвращаемое значение - код ошибки
*/
int read_sec_parm(char *filename,char *sect_name,char *parm_name,char *save_buffer,size_t save_size)
{
FILE *cfg_file; /*указатель на конфигурационный файл*/
char Order[4000]; /*имя секции*/
char buf[4000]; /*временный буфер строки из файла*/
int num_char=0;
 
memset(Order,' ',sizeof(Order));
 
/*открытие конфигурационного файла на чтение*/
cfg_file=fopen(filename,"r");
if(cfg_file==NULL) { perror("Cfg.c:fopen()");return -1; }
 
/*построчное сканирование файла*/
while(fgets(buf,sizeof(buf),cfg_file)!=NULL)
{
int i=0;
char ch=buf;/*временная переменная, в которую заносится символ*/
 
/*
*замеряется отступ от начала строки
*(количество символов пробелов+табуляций)
*/
while((ch==' ')||(ch=='\t')) ch=buf[++i];
 
/*
*если встретился символ коментариев или новая строка, то осуществляется
*переход на следующую строку
*/
if ((ch=='#')||(ch==';')||(ch=='\n')) continue;
 
/*нахождение секции*/
if(sscanf(buf+i,"[%s]",Order)!=0) continue;
 
/*если секция не наша то дальше продолжается сканирование*/
if (strncmp(sect_name,Order,strlen(sect_name))!=0) continue;
 
/*сравнение названий параметров*/
if (strncmp(parm_name,buf+i,strlen(parm_name))!=0) continue;
 
int j=i;/*номер последнего символа в строке*/
ch=buf[j];
 
/*символ ' ' является допустимым*/
while((ch!='\t')&&(ch!=';')&&(ch!='#')&&(ch!='\n')) ch=buf[++j];
num_char=j-(i+strlen(parm_name)+sizeof('='));
if(num_char>=save_size) {num_char=-1;break;}
strncpy(save_buffer,&buf[i+strlen(parm_name)+sizeof('=')],num_char);
save_buffer[num_char]=0;
 
break;
}
 
/*закрытие файла*/
fclose(cfg_file);
return num_char;
}
Конфигурационный файл состоит из секций, параметров и комментариев. Секция состоит из параметров. Секция начинается с новой строки и содержит заключенное между символами “[“ и “]” имя секции. Параметр начинается с новой строки и следует вслед за объявлением имени секции или другого параметра и состоит из названия параметра, после которого стоит символ “=” и значения, расположенного после символа “=”. Если параметр является перечисляемым, он состоит из нескольких разделенных символом “,” элементов. Комментарий начинается либо с новой строки, либо в продолжение текущей строки и состоит из символа “#” или “;” и последующего текста комментария. Наличие комментария является необязательным. В имени секции и имени параметра не допускаются символы пробела. В значении параметра допускаются символы пробела. В имени параметра недопускаются.
Пример
[имя_секции] ; текст комментария
имя_параметра=значение параметра
имя_параметра=значение параметра 1, значение араметра 2

А это пример реального файла конфигурации:

[tcp_device1]
#~ ip=192.168.2.2
#~ ip=192.168.253.15
ip=127.0.0.1
port=10002

[tcp_device2]
#~ ip=192.168.2.2
ip=127.0.0.1
port=10000

[Errors]
Err0=0
Err1=6,20,1,2,45,1,2,56,1,2,47,1,2,42






Вопрос забавный: как это грамотно запустить?

Для файла /home/user/TSH.config :

[parameters]
#describes the port we work on
port=1121
#describes the attacking DNS-host
dns=killerwhale.aq




____________________________

Точнее, как запустить функцию read_sec_parm (2 раза) чтобы получить эти два параметра в какие-нибудь переменные? Если точнее, для них нужно сделать #define.
Расскажите, пожалуйста, как можно подробнее. С объявлением переменных и т.п. После VB со строками тут тяжко..
 
Текущее время: 08:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru