The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"inilib: большое число как строку"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [ Отслеживать ]

"inilib: большое число как строку"  
Сообщение от cnupm email on 04-Авг-08, 16:53 
как при помощи inilib прочитать из конфига большое число как строку ?

а то вот при таком конфиге:
[SECTION]
FIELD  = 589993772150


такой код:
std::string sField = (std::string)cfgFile["SECTION"]["FIELD"];
std::cout << "sField is " << sField << "\n";


Выдает результат:
sField is 2147483647

т.е. как сказать inilib что б она не пыталась сделать atoi к этому полю ?

Высказать мнение | Ответить | Правка | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "inilib: большое число как строку"  
Сообщение от Vladyslav Lazarenko email on 06-Авг-08, 05:18 
Привет. Стало самому интересно, почему так. В функции "void registry::section_read(fstream &input_file, section& curr_section)" нашел следующее:


      if (is_int(value_string))
        curr_section.insert(key_string, atoi(value_string.c_str()));
      else if (is_double(value_string))
        curr_section.insert(key_string, atof(value_string.c_str()));
      else
        curr_section.insert(key_string, value_string);

Где "is_int()" выглядит так:


inline bool is_int(std::string value)
{
   crop(value);
   if (value.size() == 0)
     return false;

   if (value.find_first_not_of("1234567890") < value.size())
     return false;

   return true;
}

Тоесть, в Вашем случае - никак. Только конвертировать обратно в строку.

В целом же библиотека выглядит не солидно (та же проверка is_double() не учитывает "F" и т.п., не говоря уж о реализации). Можете исправить сами. Из альтернатив можно посмотреть на:

Boost Program Options (http://www.boost.org/doc/libs/1_35_0/doc/html/program_option...)
Quick FIX (http://www.quickfixengine.org/). Там есть класс по разборке INI файла, так что именно Ваш случай. Можете просто выдрать оттуда этот класс - Open Source.

Удачи!

- Влад

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

2. "inilib: большое число как строку"  
Сообщение от cnupm email on 06-Авг-08, 15:58 
>Из альтернатив можно посмотреть на:
>
>Boost Program Options (http://www.boost.org/doc/libs/1_35_0/doc/html/program_option...)

А нету простенького-простенького примерчика использования?
ну что б как за основу взять


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

3. "inilib: большое число как строку"  
Сообщение от Vladyslav Lazarenko email on 06-Авг-08, 18:47 
>>Из альтернатив можно посмотреть на:
>>
>>Boost Program Options (http://www.boost.org/doc/libs/1_35_0/doc/html/program_option...)
>
>А нету простенького-простенького примерчика использования?
>ну что б как за основу взять

Привет. Официальная документация вот здесь - http://www.boost.org/doc/libs/1_35_0/doc/html/program_option...

Там есть кое-какие примеры. Других у меня нет. Можно поспрашивать Владимира, автора этой библиотеки, в рассылке Boost User List. Я же использую её только для разбора параметров командной строки.

Удачи!

- Влад

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру