|
98 / 81 / 14
Регистрация: 26.07.2013
Сообщений: 594
|
|
Десятичный разделитель и INI-файлы28.04.2014, 11:51. Показов 4300. Ответов 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 и десятичный разделитель Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ВВЕДЕНИЕ
Введу сокращения:
аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
|
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi
ветка по-частям.
коммит Create переделка под биомассу. txt
вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
|
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ *
Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях.
Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её.
Последовательность действий:. . .
|
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
|
|
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение.
И на уровне агентов добавится между грибами или бактериями взаимодействий.
До того я пробовал подход через многомерные массивы,. . .
|
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Налог на собак: https:/ / **********/ gallery/ V06K53e
Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf
Пост отсюда. . .
|
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop?
Ниже её машинный перевод.
После долгих разбирательств я наконец-то вернула себе. . .
|
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод
Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод.
Thinkpad X220 Tablet —. . .
|