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

Чтение и сохранение данных из конфигурационного файла - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Задача на ООП http://www.cyberforum.ru/cpp-beginners/thread357314.html
Есть задача: создайте класс, способный хранить строку в куче. Должна существовать возможность передачи строки объекта вашего класса и потом получения указателя на такую же строку. Должна быть также возможность изменения строки объекта класса. Используйте конструкторы и деструктор для внедрения всех автоматических инициализаций и очистки объекта. Я написал, но не уверен что правильно. Если есть...
C++ Создание базы данной на С++ Нужно сделать базу данных на с++ в Вижуале. Необходимо составить базу данных в виде базы клиентов психолога. В базе клиентов сделать поиск по клиенту и возможность присвоения им тестов, которые они прошли у психолога. Если вас заинтересует задание, я детально расскажу, что хочу получить. http://www.cyberforum.ru/cpp-beginners/thread357311.html
C++ строковая переменная
как сделать так чтобы в str (изначально ничего нет, и это строковый тип) str= str + "D" в str должно быть полсе этого "D" str=str+"D"; в str теперь "DD" можно ли это сделать?
C++ Делители
Делители Условие задачи: Дано число n. Найти все его делители. Решение: Т. е. нам нужно найти такие числа Xi при которых число n без остатка делиться на Xi. Вот и всё. Очень простая задача: var n,i:integer; begin readln(n); for i:=1 to n do
C++ Расчитать значение числового ряда. Помогите найти ошибки. http://www.cyberforum.ru/cpp-beginners/thread357295.html
Необходимо расчитать значение числового ряда:Сумма(от n=1 до бесконечности) 1/((2n-1)*(2n+1)) =1/2 -->(значение стремится к 0.5) И вычислить относительную и абсолютную погрешность. Вот моя наработка: #include "stdafx.h" #include "iostream" #include "conio.h" //Подключение библиотек using namespace std;
C++ а куб в четырех операциях pow(a,3.0) и pow (a,10) за четыре операции ; pow(a,4.0) pow(a,20.0) за пять операции как написать без пова ? Добавлено через 12 минут Дано действительное число a. Не пользуясь никакими другими арифметиче- скими операциями, кроме умножения, получить: а) a3 подробнее

Показать сообщение отдельно
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
28.09.2011, 01:40     Чтение и сохранение данных из конфигурационного файла
fanatjan, вот написал код, работа с ini-файлом и как всегда если бесплатно то не отвечаю за ошибки, писал на коленке.
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <memory.h>
#include <malloc.h>
#include <time.h>   
#define  BUF_KEY  32          // размер буфера для ключа
#define  BUF_VAL  255         // размер буфера для значения
#define  MAX_INI_RECORDS  7   // кол-во записей в ini-файле
 
typedef  struct _value {
  char key[BUF_KEY];
  char val[BUF_VAL];
} xvalue;
 
char*  xget_value(xvalue*  vals, const char* key);
int    xset_value(xvalue* vals, const char* key, const char* val);
int    xopen_ini(const char* filename, xvalue* arr);
int    xsave_ini(const char* filename, xvalue* arr);
 
xvalue* vals = NULL;
int   main(void) {
    int i;
    char*  file_ini  = "D:\\config.ini"; // путь к файлу
    time_t gt = time(NULL);
    struct tm*  gtm = localtime(&gt);
 
    vals = (xvalue*) malloc(sizeof(xvalue) * MAX_INI_RECORDS);
    if(vals == NULL)
           exit(1);
 
    // если ini-файл будет открыт, массив заполниться записиями из файла
    if(! xopen_ini(file_ini, vals)) { 
           free(vals);
           exit(2);
    }
    // далее в массиве содержаться значения всех записей ini-файла
 
    // вывод всех пар ключ = значение
    for(i = 0; i < MAX_INI_RECORDS; i++)
           printf("%s = %s\n", vals[i].key, vals[i].val );
    
    // вот так можно конвертировать числовое значение для не целых чисел atof
    printf("\n\tvalue: %d\n", atoi( xget_value(vals, "param1") ));
    // получение по ключу
    printf("\tvalue: %s\n", xget_value(vals, "platforms") );
 
    // изменить значение по заданному ключу
    xset_value(vals, "platforms", "Unix, Linux, OS/360");
   xset_value(vals, "video", "1");
   xset_value(vals, "date", asctime(gtm) ); 
    
   // сохранить в файл
   if(! xsave_ini(file_ini, vals))
         puts("Error, not save  ini-file!!!");
   free(vals);
   vals = NULL;
   system("pause");
   return 0;
}
 
// получения значения по указанному ключу с учётом регистра
char*  xget_value(xvalue*  vals, const char* key) {
    int i;
   for(i = 0; i < MAX_INI_RECORDS; i++) {
         if(! strcmp(vals[i].key, key))
               return vals[i].val;
   }
   return NULL;
}
 
// присваивание  нового значения по указанному ключу с учётом регистра
int  xset_value(xvalue* vals, const char* key, const char* val) {
    int i;
    for(i = 0; i < MAX_INI_RECORDS; i++) {
           if(! strcmp(vals[i].key, key)) {
                 strcpy(vals[i].val, val);
                 return 1;
           }
    }
    return 0;
}
 
// открытие файла - ini
int  xopen_ini(const char* filename, xvalue* arr) {
    xvalue val;
    FILE*  fp;
    int    cnt;
    if(! (fp = fopen(filename, "r")))
            return 0;
    memset((void*)&val, 0, sizeof(xvalue));
 
    for(cnt = 0; fscanf(fp, "%[^=]=%[^\n]%*1c", val.key, val.val) > 1; cnt++) 
             memcpy((void*)&arr[cnt], (const void*)&val, sizeof(xvalue)); 
    fclose(fp);
    return 1;
}
 
// сохранения массива записей в файл-ini
int  xsave_ini(const char* filename, xvalue* arr) {
    FILE* fp;
    int i;
    if(! (fp = fopen(filename, "w+")))
           return 0;
    rewind(fp);
    for(i = 0; i < MAX_INI_RECORDS; i++) {
           fprintf(fp, "%s=%s", arr[i].key, arr[i].val);
           if(i + 1 != MAX_INI_RECORDS)
                fputc('\n', fp);
    }
    fflush(fp);
    fclose(fp);
    return 1;
}
Формат INI-файла.
platforms=MS-DOS, Window 95
video=1
count=100
param1=200
param2=500
param3=7000
date=xxxxx
 
Текущее время: 17:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru