|
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 594
|
|
Десятичный разделитель и INI-файлы28.04.2014, 11:51. Показов 4339. Ответов 29
Метки нет (Все метки)
- Здравствуйте завсегдатаи. С прошедшими и наступающими Вас праздниками! Помогите пожалуйста
разобраться с одним вопросом. Мое приложение использует для сохранения параметров INI-файл. В нем используются действительные ключи. Когда я запускаю его на одном компьютере, то он требует, чтобы эти действительные ключи имели десятичный разделитель точку. При запуске этого-же приложения на другом компьютере, он требует, чтобы действительные ключи имели десятичный разделитель - запятая. - Подскажите пожалуйста, как прийти к общему знаменателю в данном случае? Заранее спасибо !...
0
|
|
| 28.04.2014, 11:51 | |
|
Ответы с готовыми решениями:
29
Десятичный системный разделитель Embarcadero. Как настроить десятичный разделитель
|
|
Супер-модератор
|
|
| 28.04.2014, 12:00 | |
|
Чтение/запись осуществляются методами ReadFloat/WriteFloat, поэтому самый приемлемый вариант - переопределить эти методы класса TIniFile, чтобы и запись и чтение осуществлялись всегда с одним и тем же (любым) разделителем. С точкой, например. То есть, жестко задать разделитель.
1
|
|
|
91 / 91 / 22
Регистрация: 02.07.2013
Сообщений: 332
|
|
| 28.04.2014, 12:16 | |
|
Staut, см. DecimalSeparator
1
|
|
|
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 594
|
|
| 28.04.2014, 14:06 [ТС] | |
|
- cOrvax, среди свойств класса TIniFile я DecimalSeparator почему-то не нашел.
- UI подскажите пожалуйста, как переопределить, например метод ReadFloat, класса TIniFile, чтобы он работал с нужным мне разделителем.
0
|
|
|
Супер-модератор
|
|
| 28.04.2014, 14:16 | |
|
Как переопределить метод класса вообще - понятно? Да, да, опять те самые классы-перехватчики. Ну а уж реализация - элементарна: запоминать старое значение DecimalSeparator (либо FormatSettings.DecimalSeparator в новых версиях), подменять его на точку, вызывать ReadFloat/WriteFloat из базового класса TIniFile и потом возвращать назад старое значение, чтобы не сбивать работу остальной части программы.
1
|
|
|
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 594
|
|
| 28.04.2014, 14:26 [ТС] | |
|
- Спасибо UI! Попытаюсь сделать сам. Если возникнут вопросы, извините, придется переспросить...
0
|
|
|
|
|||||||
| 28.04.2014, 16:40 | |||||||
1
|
|||||||
|
Супер-модератор
|
|
| 28.04.2014, 16:48 | |
|
Ну да, ну да. А потом попробуй объяснить пользователю, который 20 лет вводит в Edit вещественные значения с запятой, почему вдруг стала вылетать ошибка, или почему ему не дают ввести запятую (которая очень удобно набирается на цифровой клавиатуре при русской раскладке), а требуют ввода какой-то точки.
1
|
|
|
|
|
| 28.04.2014, 16:53 | |
|
Если сразу с первой же версии программы использовать DecimalSeparator = '.', то такой проблемы не будет.
0
|
|
|
|
||
| 28.04.2014, 18:38 | ||
|
Или пользователь так часто меняет разделитель на машине ? Ну подумаешь собьются настройки, пользователь пусть введет их снова и все опять будет пучком. Но как вариант читать/писать данные с помощью WriteString/ReadString а потому уже пытаться сконвертить в float.
1
|
||
|
|
||||
| 28.04.2014, 19:14 | ||||
|
Avazart прошу отвечать на мои комменты доходчиво и понятно или вообще не писать
1
|
||||
|
|
|||
| 28.04.2014, 20:02 | |||
|
Добавлено через 51 секунду
1
|
|||
|
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 594
|
||||||
| 29.04.2014, 11:02 [ТС] | ||||||
|
- kzru_hunter, Avazart, спасибо за участие в теме! Я придумал еще один вариант. Можно в INI-файл,
в главную его секцию добавить еще один целочисленный или булев ключ, который будет указывать на Тип Десятичного Разделителя, используемый в данном INI-файле. Вводить этот ключ одним из первых и переустанавливать согласно ему десятичный разделитель проекта. - Вариант UI с переопределением методов класса TIniFile - ReadFloat и WriteFloat:
0
|
||||||
|
Супер-модератор
|
||
| 29.04.2014, 11:07 | ||
|
1
|
||
|
91 / 91 / 22
Регистрация: 02.07.2013
Сообщений: 332
|
|
| 29.04.2014, 13:27 | |
|
Можно позволить пользователю вводить что угодно, а перед преобразованием строк в числа менять используемый разделитель на тот, что принят в системе по умолчанию.
0
|
|
|
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 594
|
|
| 29.04.2014, 14:10 [ТС] | |
|
- UI, отталкивает от Вашего подхода только то, что приходится выполнять довольно много действий:
1) - Запоминать старое значение DecimalSeparator; 2) - Заменять его на DecimalSeparator = '.'; 3) - Работать с ReadFloat()/WriteFloat(); 4) - Восстанавливать сохраненное значение DecimalSeparator; и все это при работе с каждым действительным ключом. А если их в INI-файле много? - Да, и еще, UI, видимо будет еще один промежуточный пункт: 2') - a) После ввода с помощью Базового-ReadFloat(), отлов вручную десятичного разделителя "точка" и замена его на "запятую" в Едитах и других VCL-компонентах; - b) Перед выводом с помощью Базового-WriteFloat(), отлов вручную десятичного разделителя "запятая" и замена его на "точку" в Едитах и других VCL-компонентах; для любителей запятой. Или я опять что-то недодумал?
0
|
|
|
Супер-модератор
|
|||||||
| 29.04.2014, 14:50 | |||||||
|
Staut, ты просто не понял того, что я тебе предложил. Смотри:
1
|
|||||||
|
|
||
| 29.04.2014, 15:12 | ||
|
Для обычных классов - обычное наследование, кода будет не больше, а может даже меньше. А для конкретной задачи возможно достаточно было бы написать две ф-ции в которые будет передаваться TIniFile параметром.
0
|
||
|
|
|
| 29.04.2014, 19:02 | |
|
Пора бы уже забыть про запятую в качестве десятичного разделителя. Запятая должна использовать только в качестве перечисления. И зачем вы всё так усложняете? Чем не устраивает фиксированный десятичный разделитель - точка?
0
|
|
| 29.04.2014, 19:02 | |
|
Помогаю со студенческими работами здесь
20
Как сменить системные параметры: десятичный разделитель и разделитель в дате? Десятичный разделитель Десятичный разделитель Десятичный разделитель в AutoCAD Lexical_cast и десятичный разделитель Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Оттенки серого
Argus19 18.03.2026
Оттенки серого
Нашёл в интернете 3 прекрасных модуля:
Модуль класса открытия диалога открытия/ сохранения файла на Win32 API;
Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
|
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-rectangles-sdl3-c. zip
finish-rectangles-sdl3-cpp. zip
|
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие.
Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
|
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ВВЕДЕНИЕ
Выполняя задание на управление насосной группой заполнения резервуара,. . .
|
|
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
|
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога
Финальные проекты на Си и на C++:
hello-sdl3-c. zip
hello-sdl3-cpp. zip
Результат:
|
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога
MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|