Форум русскоязычного сообщества Ubuntu


Получить помощь и пообщаться с другими пользователями Ubuntu можно
на irc канале #ubuntu-ru в сети Freenode
и в Jabber конференции ubuntu@conference.jabber.ru

Автор Тема: Конфиг для С++ программы  (Прочитано 666 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн mersinvald

  • Автор темы
  • Новичок
  • *
  • Сообщений: 33
    • Просмотр профиля
Конфиг для С++ программы
« : 25 Августа 2014, 20:41:04 »
Написал утилитку, выводящую в notify-osd последний твитт указанного пользователя, последняй mention или последний твитт таймлайна,  если такой твитт еще не выводился, c юзерпиком автора.
По сути, надстройка над t из rubygems.
При прикручивании крона, очень уобно получилось)

УМВР, никак не нарадуюсь. Так как такого еще вроде как нет, решил поделиться с сообществом, но застопорился на чтении конфигов из файла.

Подскажите, как научить программу читать конфиг формата
VAR1=username
VAR2=path
VAR3=imgpath
...

Также буду рад, если кто-нибудь возьмется переписать программу как python-скрипт, так как С++ исходник, мягко сказать, не очень удобен. (какашками за кривокод чур не кидать)

Пользователь решил продолжить мысль [time]25 Август 2014, 21:52:03[/time]:
UPD: в голову пришла разумная идея оставить все как есть и делать инициализацию из bash с передачей параметров в кач-ве аргументов

Возник второй вопрос:
Как научить пограмму понимать аргументы типа --username=mike и -u mike?
Если можно, с листингом

Пользователь решил продолжить мысль 25 Августа 2014, 22:00:30:
UPD: Собстно, как bash скрипту пихнуть переменные из конфига меня тоже интересует
« Последнее редактирование: 25 Августа 2014, 22:00:30 от mersinvald »

Оффлайн .ubuntufan

  • Активист
  • *
  • Сообщений: 638
    • Просмотр профиля
Re: Конфиг для С++ программы
« Ответ #1 : 27 Августа 2014, 02:35:56 »
CPP:

Код: (cpp) [Выделить]
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <sstream>
#include <map>
 
using namespace std;
 
vector<string> &split(const string &s, char delim, vector<string> &elems) {
    stringstream ss(s);
    string item;
    while (getline(ss, item, delim)) {
        elems.push_back(item);
    }
    return elems;
}
 
vector<string> split(const string &s, char delim) {
    vector<string> elems;
    split(s, delim, elems);
    return elems;
}
 
int main() {
        string readbuf;
        ifstream infile;
        vector<string> splitStrings;
        map<string, string> config;
 
        infile.open("conf.txt");
 
        while(!infile.eof()) {
                getline(infile, readbuf);
                splitStrings = split(readbuf, '=');
                if (splitStrings.size() > 1) {
                        config[splitStrings[0]] = splitStrings[1];
                }
        }
        infile.close();
 
        cout << "Dump config data:" << endl;
 
        map<string, string>::iterator iter;
        for (iter = config.begin(); iter != config.end(); ++iter) {
                cout << (*iter).first << ": " << (*iter).second << endl;
        }
 
        return 0;
}

Python:

Код: (python) [Выделить]
# coding: utf-8

config = {}
with open('conf.txt') as f:
    for line in f.readlines():
        if line:
            splits = line.strip().split('=', 2)
            if (len(splits) > 1):
                config[splits[0]] = splits[1]


print("Dump config data:")
for (k, v) in config.iteritems():
    print("%s: %s" % (k, v))


 

Страница сгенерирована за 0.016 секунд. Запросов: 22.