IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Où se trouvent les variables (d'environnement) LC_NUMERIC et LC_CTYPE ?


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 164
    Par défaut Où se trouvent les variables (d'environnement) LC_NUMERIC et LC_CTYPE ?
    Bonjour,

    2 questions sur les variables d'environnement du Shell :

    Q1 / Où se trouvent les variables (d'environnement) LC_NUMERIC et LC_CTYPE ?
    et
    Q2 / Quelles sont les valeurs possibles à attribuer à ces deux variables ?

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 430
    Par défaut
    Alors, au plus simple, je te suggère la lecture d'au moins des man locale section 1 et 5 ainsi que de localdef.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Q3. combien tu nous donnes pour faire tes devoirs ?

  4. #4
    Membre confirmé Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 164
    Par défaut
    1/ Quand je tape :
    j'obtiens local(1). Comment obtenir local(5) ?

    2/
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ man localdef  #ne marche pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ man localedef #marche

  5. #5
    Membre confirmé Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 164
    Par défaut
    @N_BaH Ma considération !

  6. #6
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 143
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 143
    Par défaut
    Citation Envoyé par Liamm Voir le message
    1/ Quand je tape :
    j'obtiens local(1). Comment obtenir local(5) ?
    En commençant par man man
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  7. #7
    Membre confirmé Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 164
    Par défaut
    En fait, la question finale à laquelle je cherche une réponse est :

    Comment utiliser la commande sort du shell pour trier des valeurs numériques avec des séparateurs pour les milliers (espace non sécable) ?

    Et je sens que la solution est par là :
    LC_NUMERIC
    The definition starts with the string LC_NUMERIC in the first column.

    The following keywords are allowed:

    decimal_point
    followed by the string that will be used as the decimal
    delimiter when formatting numeric quantities.

    thousands_sep
    followed by the string that will be used as a group separator
    when formatting numeric quantities.

    . . .

  8. #8
    Invité
    Invité(e)
    Par défaut
    hmmm, je ne suis pas convaincu : ce sont des définitions globales pour le système entier.
    je ne vois pas comment définir thousands_sep en exportant LC_NUMERIC.

  9. #9
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 430
    Par défaut
    En fait, il y a un bug dans le cas des locales qui prennent des séparateurs sur plusieurs octets...

    Par exemple, la locale fr_FR.utf8 utilise comme thousands_sep le narrow nobreak space (\xe2\x80\xaf) et avec celle-ci, pas moyen de trier des nombres avec les séparateurs.

    Par contre, si on utilise par exemple la locale en_US.utf8 qui a comme séparateur de centaine la virgule et le point comme séparateur décimale, cela fonctionne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    $ locale
    LANG=fr_FR.UTF-8
    LANGUAGE=
    LC_CTYPE="en_US.utf8"
    LC_NUMERIC="en_US.utf8"
    LC_TIME="en_US.utf8"
    LC_COLLATE="en_US.utf8"
    LC_MONETARY="en_US.utf8"
    LC_MESSAGES="en_US.utf8"
    LC_PAPER="en_US.utf8"
    LC_NAME="en_US.utf8"
    LC_ADDRESS="en_US.utf8"
    LC_TELEPHONE="en_US.utf8"
    LC_MEASUREMENT="en_US.utf8"
    LC_IDENTIFICATION="en_US.utf8"
    LC_ALL=en_US.utf8
    $ echo -e '20100\n20,000' |  sort -h
    20,000
    20100
    $ echo -e '20100\n20,100' |  sort -h
    20,100
    20100
    $ echo -e '20100\n20,100.1' |  sort -h
    20100
    20,100.1
    $ echo -e '20100.2\n20,100.1' |  sort -h
    20,100.1
    20100.2

  10. #10
    Membre confirmé Avatar de Liamm
    Femme Profil pro
    Enseignant
    Inscrit en
    Janvier 2019
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2019
    Messages : 164
    Par défaut
    Merci disedorgue,

    C'est gênant ce bug.
    Et c'est étonnant qu'il ne soit pas corrigé depuis le temps.

    Que peut-on avoir dans une zone "numérique" ?
    => des chiffres, des séparateurs pour les décimales variant suivant les pays, des séparateurs pour les milliers variant suivant les pays,les signes + et -, des espaces précédant la valeur numérique, et (mais ce n'est pas trop recommandé) des sigles comme $,€ variant suivant les pays.

    On peut voir ce bug lié aux variables locales ou à la commande sort, qui ne prend pas en compte les variables locales.

    Ne pourrait-on pas imaginer une commande sort qui en plus des options -n -g -h possède une option pour gérer le cas de ces séparateurs de milliers ?

    NB : Chez moi le "no break space" en UTF-8 correspond non pas à (\xe2\x80\xaf) mais à (\xc2\xa0)

  11. #11
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 430
    Par défaut
    Ce n'est pas sort le problème, c'est la libc je pense avec les appels strcoll et autre...

    Sinon, tu confonds entre le "no-break space" (c2a0) et le "narrow no-break space" (e280af) :
    https://www.fileformat.info/info/uni...202f/index.htm
    https://www.fileformat.info/info/uni...00a0/index.htm

    Et donc, même si pas de bug, la solution avec la locale ne fonctionnerait pas dans ton cas puisque toi, tu veux le "no-break space"

    Pour la commande sort, tu peux toujours faire une proposition d'évolution aux concepteurs, s'ils y trouvent un intérêt, il pourraient le prendre en considération dans le futur...

  12. #12
    Expert confirmé Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 308
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 308
    Par défaut
    Bonjour

    Tu touches là la différence entre l'idéal et la réalité. Dans l'idéal, on pourrait mettre n'importe quel caractère dans les noms de fichiers. Mais si on met des espaces, certains scripts mal-faits vont planter; d'autres fichiers avec des caractères UTF8 exotiques idem (⛪). Dominos Pizza a eu un bug, largement relayé par la presse, car les adresses françaises contenaient une apostrophe, ce qui devait faire sortir de la chaîne de caractère et plantait le "GPS".

    L'espace insécable ne fait pas appel au nombre mais à l'écriture du nombre. Tu voudrais donc trier une écriture comme un nombre. La technique est celle donnée dans l'autre discussion. Pardon d'insister. Il faut transformer l'écriture en nombre pour la traiter.
    Là où je te comprends, c'est que l'espace insécable est intéressante principalement pour les nombres et les ponctuations. Donc ce n'est pas élégant d'avoir à transformer. Mais ta donnée n'est pas considérée numérique et il va passer de l'eau sous les ponts avant qu'elle le soit.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Free Pascal] Comment gérer les variables d'environnement
    Par TheBigMac dans le forum Free Pascal
    Réponses: 4
    Dernier message: 15/04/2006, 11h32
  2. Comment modifier les variables d'environnement ?
    Par Jean-Jacques Engels dans le forum Langage
    Réponses: 3
    Dernier message: 26/12/2005, 22h42
  3. Les variables d'environnement
    Par stoyak dans le forum Développement OS X
    Réponses: 11
    Dernier message: 04/11/2005, 12h02
  4. les variables d'environnement
    Par micknic dans le forum Linux
    Réponses: 8
    Dernier message: 25/04/2005, 14h30
  5. [.NET]Modifier les variables d'environnement dans...
    Par GusS dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 09/02/2005, 16h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo