2016-02-16 3 views
0

Прежде всего, это должно быть действительно разрешено на C и стандартными функциями C UNIX (из-за ограничений проекта). Таким образом, C++ или альтернативные библиотеки выходят за рамки вопроса.Программное изменение десятичного разделителя с помощью C setlocale()

Я знаю, как установить локаль пользователя по умолчанию с помощью setlocale, а также установить стандартные локали C/POSIX.

Однако, я в ситуации, когда разделитель десятичных знаков задан в файле, поэтому я хочу, чтобы моя программа временно меняла разделитель десятичной дроби.

LC_NUMERIC ожидает название локали ... но я не хочу указывать его имя локали, но символ разделителя напрямую.

Как это можно сделать?

ответ

2

Ну, я боюсь вам не понравится решение :)

Прежде всего, так как вы работаете с setlocale вы должны указать имя локали. Поэтому должен быть языковой стандарт с свойством LC_NUMERIC, определенным вами во время выполнения программы. Поэтому вам нужно определить новый язык. Вы можете определить его с помощью localedef. Вы можете использовать this doc в качестве руководства для создания и использования нового языкового стандарта и this site, чтобы получить исходные файлы, которые вы можете использовать в качестве шаблона для своего пользовательского определения локали.

+0

Действительно, мне это не нравится, однако причина в том, что это не объем работы, а тот факт, что он включает в себя создание системных файлов, которые должны быть установлены на машине пользователя. Если новый языковой стандарт может быть установлен программно изнутри приложения без использования файлов локали, это было бы хорошо для меня. – cesss

+0

Нет. Взгляните на приведенный выше пример. Они описывают методы компиляции и _use_ locale, не устанавливая их в системную папку. – user3159253

+0

Обычно рецепт включает создание временной папки ([mkdtemp] (http://linux.die.net/man/3/mkdtemp)), хранение файлов определения локалей в этой папке, «компиляция» и последующее использование нового locale, опять же, из временного каталога. Может быть, потребуется меньше усилий, чтобы использовать некоторые функции форматирования номера, которые не требуют локализации как такового, а скорее настраиваемого форматирования. Однако, если вы хотите/должны остаться с языковым материалом, я боюсь, что у вас нет другого выбора. – user3159253