Mon cher journalounet,
Je ne suis en aucun cas un expert en matière d'i18n ou de localization, j'ai même été parfois pris en flagrant délit d'anti utf8isme primaire. Néanmoins je m'interroge très fortement sur la santé mentale des gens qui ont trouvé que c'était une bonne idée de localiser le séparateur décimal (cad virgule pour les français et point pour le reste du monde). Encore plus pour les quelques guignols qui ont jugé utile de rendre toutes les fonctions de "base" (atof, scanf etc) de la libc "locale-aware" alors qu'elles n'ont pas été conçues pour ça. Ainsi que le côté "global" de la locale: quand on fait un appel à setlocale ça s'applique à tout le monde dans l'appli: le programme comme les libs, et toutes les threads.
Alors à quoi on abouti, mon journalounet ? j'ai mon module python qui lit des fichiers de données. Ces fichiers sont en texte (pour la portabilité et la facilité d'édition), c'est de l'ascii tout gentil. Ils contiennent entre autres plein de nombres en virgule flottante. C'est du C à l'ancienne, sans fioritures ni headers exotiques. C'est du costaud, du robuste, ça a voyagé et vu plein d'Unix et de compilateurs différents. Tout marche bien, c'est super. Et là tout à coup je charge un autre module python, qui en charge un autre etc et dans le paquet y'en a un qui se dit "et si je faisais un setlocale pour bien causer la langue de l'autochtone?" . Et il le fait ce con. Et du coup, ben au lieu de lire des nombres à virgule flottante mon module ne lit plus que la partie à gauche du point décimal, parce qu'après il attend une virgule. Et qu'est-ce qui se passe ? ben ça bugge, le moteur gauche de la fusée demarre avec 0.5 seconde d'avance, elle part en vrille et va s'abattre sur la maison blanche, En représaille le président des Etats Unis d'Amerique appuie sur son bouton rouge et 3000 missiles vont s'abattre sur la russie et la corée du nord. Qui répliquent. Game over.
voilà pourquoi je hais les locales (et particulierement LC_NUMERIC)
Je ne suis en aucun cas un expert en matière d'i18n ou de localization, j'ai même été parfois pris en flagrant délit d'anti utf8isme primaire. Néanmoins je m'interroge très fortement sur la santé mentale des gens qui ont trouvé que c'était une bonne idée de localiser le séparateur décimal (cad virgule pour les français et point pour le reste du monde). Encore plus pour les quelques guignols qui ont jugé utile de rendre toutes les fonctions de "base" (atof, scanf etc) de la libc "locale-aware" alors qu'elles n'ont pas été conçues pour ça. Ainsi que le côté "global" de la locale: quand on fait un appel à setlocale ça s'applique à tout le monde dans l'appli: le programme comme les libs, et toutes les threads.
Alors à quoi on abouti, mon journalounet ? j'ai mon module python qui lit des fichiers de données. Ces fichiers sont en texte (pour la portabilité et la facilité d'édition), c'est de l'ascii tout gentil. Ils contiennent entre autres plein de nombres en virgule flottante. C'est du C à l'ancienne, sans fioritures ni headers exotiques. C'est du costaud, du robuste, ça a voyagé et vu plein d'Unix et de compilateurs différents. Tout marche bien, c'est super. Et là tout à coup je charge un autre module python, qui en charge un autre etc et dans le paquet y'en a un qui se dit "et si je faisais un setlocale pour bien causer la langue de l'autochtone?" . Et il le fait ce con. Et du coup, ben au lieu de lire des nombres à virgule flottante mon module ne lit plus que la partie à gauche du point décimal, parce qu'après il attend une virgule. Et qu'est-ce qui se passe ? ben ça bugge, le moteur gauche de la fusée demarre avec 0.5 seconde d'avance, elle part en vrille et va s'abattre sur la maison blanche, En représaille le président des Etats Unis d'Amerique appuie sur son bouton rouge et 3000 missiles vont s'abattre sur la russie et la corée du nord. Qui répliquent. Game over.
voilà pourquoi je hais les locales (et particulierement LC_NUMERIC)
> Lire le journal (50 commentaires, moyenne: 3,4).
Vous avez demandé le commentaire #794870.



[+] perl
Suffit de reformater ton fichier :
Le wiki de l'association culture libre : collection d'œuvres sous licence art libre.
[^]Re: perl
"Ils contiennent entre autres plein de nombres en virgule flottante."
ou l'art de flinguer un fichier de données.
Je pense que la solution serait d'utiliser un format xml pour le stockage des données :-)
Il y en a marre de devoir écrire des tonnes de parseurs buggés tout le temps.
http://linuxfr.org/board <-- des moules, du sang, de la violence
[^]Re: perl
je pense que la solution serait d'utiliser un format xml pour le stockage des données
Quand tu exposes un problème que tu as en informatique, il y a toujours une bonne âme pour te proposer une solution avec XML. Ensuite, tu as DEUX problèmes...
( Zzzzzzzzz... )
[^]Re: perl
Quand on fait une citation, il est plus honnête de laisser le smiley qui indique la déconnade.
Maintenant, la horde de moinsseurs de panurge vont s'abattre sur mon misérable petit post.
http://linuxfr.org/board <-- des moules, du sang, de la violence
[+] [^]Re: perl
Quand on fait des smileys, il est préférable d'en connaitre l'usage approprié.
Windows has no users. It has hostages.
[^]Re: perl
AFAIK à la base on (jwz ?) disait ça pour les expressions rationnelles donc tout le monde à tord dans ce thread en fait.
Free Softwares Users Group Arlon (Sud Luxembourg, Belgique)
pertinent, e adj. Approprié ; qui se rapporte exactement à ce dont il est question.
[^]Re: perl
donc tout le monde à tord
Et surtout toi, car, ne l'oublions pas, le tord due !
[^]Re: perl
XML is like violence : if it doesn't work, use more.
[^]Re: perl
Moi je vote pour le format binaire optimisé, léger et tellement plus fun :-)
[^]Re: perl
Ou ptete un (pseudocode)
-> setlocale(localeinit)
parsing du fichier
-> setlocale(localedest)
(ré)écriture du fichier
Ceci suppose bien évidemment de connaître la locale init et la locale dest. C'est un problème parce que c'est rarement gardé (idéalement ça devrait être des metas-données du fichiers) et que dans les vieux progs on s'en foutais.
[^]Re: perl
en plus le setlocale c'est pas super thread-safe donc si t'as un autre thread en même temps qui lit des trucs ça risque de pas être beau
[^]Re: perl
Avec le -i sans argument ça aurait été beau tiens.
Free Softwares Users Group Arlon (Sud Luxembourg, Belgique)
pertinent, e adj. Approprié ; qui se rapporte exactement à ce dont il est question.
[^]Re: perl
On pourrait peut etre verifier qu'il y a des nombres avant et apres le point pour etre sur d'etre sur un nombre flottant et changer le . que dans ce cas
[^]Re: perl
dans ce cas
cat file | sed 's/\([0-9]\),\([0-9]\)/\1\.\2/g'
et pas besoin de perl
(pas besoin de perl avant non plus ;))
Subete ga wakatta toki…watashi ga anta wo korosu.
[^]Re: perl
Alors autant y aller comme ça:
sed -i 's/\([0-9]\),\([0-9]\)/\1\.\2/g' monfichier
si le but c'est de modifier le fichier de base.
[^]Re: perl
oui, mais avec perl tu peux utiliser les look around (quelqu'un connaitrait le terme francisé, d'ailleurs ?) :)
s/(?<=\d)(?=\d),/./