2016-02-16 5 views
0

Tout d'abord, cela doit être réellement résolu en C, et avec les fonctions C standard UNIX (à cause des contraintes du projet). Ainsi, les bibliothèques C++ ou alternatives sont en dehors de la portée de la question.Changement par programme du séparateur décimal avec C setlocale()

Je sais comment définir les paramètres régionaux utilisateur par défaut avec setlocale, ainsi que la définition des paramètres régionaux C/POSIX standard.

Cependant, je suis dans une situation où le séparateur décimal est spécifié par le fichier, donc je veux que mon programme change temporairement le séparateur décimal.

LC_NUMERIC attend un nom de locale ... mais je ne veux pas lui donner un nom de locale, mais le caractère séparateur directement.

Comment cela peut-il être fait?

Répondre

2

Eh bien, je crains que vous ne serez pas comme la solution :)

Tout d'abord, puisque vous travaillez avec setlocale vous devez fournir un nom de lieu. Il doit donc y avoir une locale avec la propriété LC_NUMERIC définie par vous dans l'exécution du programme. Par conséquent, vous devez définir un nouveau paramètre régional. Vous pouvez le définir avec localedef Vous pouvez utiliser this doc comme guide pour créer et utiliser un nouveau paramètre régional et this site pour obtenir les fichiers source que vous pouvez utiliser comme modèle pour votre définition de paramètres régionaux personnalisés.

+0

En effet, je ne l'aime pas, cependant, la raison n'est pas la quantité de travail, mais le fait qu'il implique la création de fichiers système qui doivent être installés dans la machine de l'utilisateur. Si un nouvel environnement local pouvait être configuré par programme depuis l'intérieur d'une application sans utiliser les fichiers de paramètres régionaux, cela me conviendrait parfaitement. – cesss

+0

Non. Jetez un coup d'œil à l'exemple ci-dessus. Ils décrivent des techniques pour compiler et utiliser un environnement local sans l'installer dans le dossier système. – user3159253

+0

Généralement, la recette implique la création d'un dossier temporaire ([mkdtemp] (http://linux.die.net/man/3/mkdtemp)), le stockage des fichiers de définition de paramètres régionaux dans ce dossier, "compilation" et l'utilisation ultérieure de la nouvelle locale, encore une fois, à partir du répertoire temporaire. Peut-être que cela demanderait moins d'efforts pour utiliser certaines fonctions de formatage de nombres personnalisés qui ne nécessiteraient pas de paramètres locaux en soi, mais plutôt un formatage configurable. Cependant, si vous souhaitez/devez rester avec des trucs locaux, j'ai peur que vous n'ayez pas d'autre choix. – user3159253