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

Как лучше реализовать конфиг? - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Не знаю h e l p me! http://www.cyberforum.ru/cpp-beginners/thread1524428.html
Заранее спасибо за вашу помощь! Я хочу сделать что то на подобе чат с ботом если я допустим пишу слова которые я укажу в коде например asd то он мне покажет надпись которую я укажу а если другое слово то ничего как это сделать?
C++ Как найти наименьшее число из 3 случайных чисел? Как найти наименьшее число из 3 рандомных чисел? http://www.cyberforum.ru/cpp-beginners/thread1524375.html
C++ Односвязный список
Начал читать про односвязные списки и никак не пойму, зачем мы выделяем память под первый элемент списка? Мы сначала определяем указатель на начало списка, а потом инициализируем его(выделяем память). Например: #include <iostream> using namespace std; struct A { int key; };
C++ Переписать метод пузырька шейкерным методом сортировки
Нужно сделать две одинаковые сортировки методом пузырька и шейкерным,пузырьком я сделала,а вот с шейкерным как-то пока не выходит. Может подскажите,как мне этот код переписать,чтоб получился шейкерный метод?) Заранее благодарна)) #include "stdafx.h" #include "math.h" #include <iostream> #include <iomanip> #include <ctime> #include <cstdlib> #include <time.h> using namespace std;
C++ Удалите палиндромы http://www.cyberforum.ru/cpp-beginners/thread1524356.html
Удалите в целочисленном массиве все положительные числа, которые являются палиндромами.
C++ Инициализация массива в классе Как инициализировать массив в классе? Пишу такой код, но компилятор выдает: 9:53: error: incompatible types in assignment of 'int' to 'char ' #include <iostream> class Test { public: char array; подробнее

Показать сообщение отдельно
Valeryn
41 / 25 / 5
Регистрация: 17.05.2015
Сообщений: 163
04.09.2015, 09:57     Как лучше реализовать конфиг?
Написал программку, которая читает файл конфигурации, берет от туда некоторые параметры и присваивает их кнопкам.

Файл конфигурации представляет следующее:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
###################################
## [1]  "Example"   <"C:\Path\To\Exe.exe" -param1 /param2 --param3>
##
###############################
###############################
[0] "calc"  <calc>
[1] "1C"    <"C:\path\to\1C\bin\1cv8.exe" enterprise /s server\example>
[2] " " <  >
[3] " " <  >
[4] " " < >
[5] " " < >
[6] " " < >
[7] " " < >
[8] " " < >
[9] " " < >
Код функции, которая сортирует код по QList listName(тут лист имен для кнопок) и QList listPath(тут лист путей к самой программе).
C++ (Qt)
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
bool File::readFile() {
    bool flag_empty;
    bool flag_name;
    bool flag_path;
    bool write;
    QString tempLine;
    QString tempName;
    QString tempPath;
    listName.clear();
    listPath.clear();
    qDebug() << "Start read conf.txt";
    if (!userConf.open(QIODevice::ReadOnly | QIODevice::Text)) {
        qDebug() << "Error open conf.txt";
        qWarning("Error open conf.txt");
        userConf.close();
        return false;
    } else
    // [0] "name" <"path/to/file.exe" -arg -arg2>
    //  ^     ^         ^                ^
    //index   |         |                |
    //     name button  |             arguments
    //              path to file
    //  #hello
    //  ^
    //commit  
    while (!userConf.atEnd()) {
        write = false;
        flag_empty = false;
        flag_name = false;
        flag_path = false;
        tempName.clear();
        tempPath.clear();
        tempLine.clear();
        tempLine.push_back(userConf.readLine());
        for (int i = 0; i < tempLine.size() && tempLine.at(i) != '\n' && tempLine.at(i) != '#'; i++) {
            if (tempLine.at(i) == '[' && flag_name == false && flag_path == false && flag_empty == false) {
                flag_empty = true;
                write = true;
            }
            else if (tempLine.at(i) == '"' && flag_path == false && flag_name == false && flag_empty == false)
                flag_name = true;
            else if (tempLine.at(i) == '<' && flag_path == false && flag_name == false && flag_empty == false)
                flag_path = true;
            else if (tempLine.at(i) != ']' && flag_empty == true && flag_path == false && flag_name == false)
                qDebug() << "index ID" << tempLine.at(i);
            else if (tempLine.at(i) == ']' && flag_empty == true && flag_path == false && flag_name == false)
                flag_empty = false;
            else if (tempLine.at(i) == '\n' && flag_empty == true && flag_path == false && flag_name == false) {
                qWarning("ERROR! Conf file no close prefix \"");
                qDebug() << "ERROR! Conf file no close prefix \"";
                userConf.close();
                return false;
            }
            else if (tempLine.at(i) != '"' && flag_name == true && flag_empty == false && flag_path == false)
                tempName.push_back(tempLine.at(i));
            else if (tempLine.at(i) == '"' && flag_name == true && flag_empty == false && flag_path == false)
                flag_name = false;
            else if (tempLine.at(i) == '\n' && flag_name == true && flag_empty == false && flag_path == false) {
                qWarning("ERROR! Conf file no close name \"");
                qDebug() << "ERROR! Conf file no close name \"";
                userConf.close();
                return false;
            }
            else if (tempLine.at(i) != '>' && flag_path == true && flag_name == false && flag_empty == false)
                tempPath.push_back(tempLine.at(i));
            else if (tempLine.at(i) == '>' && flag_path == true && flag_name == false && flag_empty == false)
                flag_path = false;
            else if (tempLine.at(i) == '\n' && flag_path == true && flag_name == false && flag_empty == false) {
                qWarning("ERROR! Conf file no close name >");
                qDebug() << "ERROR! Conf file no close name >";
                userConf.close();
                return false;
            }
        }
        if (write == true) {
            qDebug() << "Button name" << tempName;
            listName << tempName;
            qDebug() << "Path file" << tempPath;
            listPath << tempPath;
        }
 
    }
    userConf.close();
    return true;
}
Ссылка на всю програмку в целом.

Мне кажется подход какой то не правильный. Тупо перебирает каждую строку по символьно, в надежде встретить какой то флаг. "[" "\"" "<". И жесткие требования к строкой последовательности. Есть какие то более грамотные, готовые реализации файлов конфигурации?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 02:07. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru