URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7524
[ Назад ]

Исходное сообщение
"inilib: большое число как строку"

Отправлено cnupm , 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 к этому полю ?


Содержание

Сообщения в этом обсуждении
"inilib: большое число как строку"
Отправлено Vladyslav Lazarenko , 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.

Удачи!

- Влад


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

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



"inilib: большое число как строку"
Отправлено Vladyslav Lazarenko , 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. Я же использую её только для разбора параметров командной строки.

Удачи!

- Влад