|
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 591
|
|
Десятичный разделитель и INI-файлы28.04.2014, 11:51. Показов 4292. Ответов 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
Сообщений: 591
|
|
| 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
Сообщений: 591
|
|
| 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
Сообщений: 591
|
||||||
| 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
Сообщений: 591
|
|
| 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 и десятичный разделитель Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта
Симптом:
После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
|
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|