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

Langage Perl Discussion :

Trier par ordre alphabétique des chaînes comportant des caractères accentués


Sujet :

Langage Perl

  1. #21
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Bah, ton script se comporte comme si tu avais une locale type fr_FR.iso88591 ou fr_FR.iso885915@euro (ou autre codepage, bref c'est pas de l'utf8). Le résultat ne trompe pas:
    Code correspondances : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #                   Encodage UTF-8                ISO8859-1        
    # -----------------------------------------------------------------
    # a ï d          => a \xC3 \xAF d              => a à ¯ d         
    # é l è v e      => \xC3 \xA9 l \xC3 \xA8 v e  => à © l à ¨ v e
    # c a l e ç o n  => c a l e \xC3 \xA7 o n      => c a l e à § o n

    D'où le résultat (avec use locale;):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    aïd abricot élève arrosoir caleçon cales couchette entonnoir zozo
    aïd  abricot élève   arrosoir caleçon  cales couchette entonnoir zozo
    À lire cette page du manuel à propos des locales, il pourrait y avoir plusieurs raisons pour lesquelles ta locale définie dans tes variables d'environnement (notamment celle qui nous préoccupe: LC_COLLATE) ne soit pas prise en compte. Donc il s'agit maintenant d'éliminer une à une les causes possibles. Il se trouve que la version de Perl utilisée peut être un paramètre (donc donne la comme demandée par disedorgue), mais aussi la configuration du système.

    Perso, chez moi ton code marche très bien avec use locale; (perl 5.18.2, mêmes variables d'environnement).
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  2. #22
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    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 276
    Points : 12 717
    Points
    12 717
    Par défaut
    Peut-être aussi un mixe de locale et utf8 car quand tu avais mis un use utf8;, on avait le bon résultat mais un mauvais affichage...

    Que donne donc le script suivant, qui active l'usage d'utf8 sauf pour la définition de la chaine de départ et pour l'affichage.
    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
    #!/usr/bin/env perl
    use strict;
    use warnings;
    use diagnostics;
    use POSIX qw(locale_h);
     
    my @liste = qw/cales abricot entonnoir couchette aïd arrosoir caleçon élève zozo/ ;
     
    use utf8;
    my $str=join (' ' , ( sort @liste )) . "\n"; 
    no utf8;
    print $str;
    use utf8;
     
    use locale;
    setlocale(LC_ALL, "fr_FR.utf8");
    print "use locale\n" ;
    $str=join (' ' , ( sort @liste )) . "\n"; 
    no utf8;
    print $str;
    Cordialement.

  3. #23
    Futur Membre du Club
    Homme Profil pro
    chômeur
    Inscrit en
    Juillet 2017
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : chômeur

    Informations forums :
    Inscription : Juillet 2017
    Messages : 39
    Points : 7
    Points
    7
    Par défaut
    Avec ce script j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    abricot arrosoir aïd cales caleçon couchette entonnoir zozo élève                    
    use locale                                
    aïd abricot élève arrosoir caleçon cales couchette entonnoir zozo

  4. #24
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    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 276
    Points : 12 717
    Points
    12 717
    Par défaut
    que donne la commande suivante sur le script perl de test:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $ sed -n '/abricot/l' fichier.pl
    Cordialement.

  5. #25
    Futur Membre du Club
    Homme Profil pro
    chômeur
    Inscrit en
    Juillet 2017
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : chômeur

    Informations forums :
    Inscription : Juillet 2017
    Messages : 39
    Points : 7
    Points
    7
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ sed -n '/abricot/l' zz.pl 
    my @liste = qw/cales abricot entonnoir couchette a\303\257d arrosoir \
    cale\303\247on \303\251l\303\250ve zozo/ ;$

  6. #26
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Si tu es sur une debian-like, tu peux tenter de re-générer tes locales puis de redémarrer:Pour voir ce que ça donne.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  7. #27
    Futur Membre du Club
    Homme Profil pro
    chômeur
    Inscrit en
    Juillet 2017
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : chômeur

    Informations forums :
    Inscription : Juillet 2017
    Messages : 39
    Points : 7
    Points
    7
    Par défaut
    Je suis sur Fedora et les locales ont l'air correctes !

    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
    $ locale
    LANG=fr_FR.UTF-8
    LC_CTYPE="fr_FR.UTF-8"
    LC_NUMERIC=fr_FR.UTF-8
    LC_TIME="fr_FR.UTF-8"
    LC_COLLATE="fr_FR.UTF-8"
    LC_MONETARY="fr_FR.UTF-8"
    LC_MESSAGES="fr_FR.UTF-8"
    LC_PAPER="fr_FR.UTF-8"
    LC_NAME="fr_FR.UTF-8"
    LC_ADDRESS="fr_FR.UTF-8"
    LC_TELEPHONE="fr_FR.UTF-8"
    LC_MEASUREMENT="fr_FR.UTF-8"
    LC_IDENTIFICATION="fr_FR.UTF-8"
    LC_ALL=
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $ localectl  status 
       System Locale: LANG=fr_FR.UTF-8
           VC Keymap: fr-oss
          X11 Layout: fr
         X11 Variant: oss

  8. #28
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Je ne te parles pas de régler tes variables d'environnement sur fr_FR.UTF-8, mais de reconstruire la locale fr_FR.UTF-8 qui pourrait être corrompue pour une raison X, elle-même. Il y a cette page qui décrit comment faire sur Fedora.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  9. #29
    Futur Membre du Club
    Homme Profil pro
    chômeur
    Inscrit en
    Juillet 2017
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : chômeur

    Informations forums :
    Inscription : Juillet 2017
    Messages : 39
    Points : 7
    Points
    7
    Par défaut
    Après avoir reinstallé glibc-common comme indiqué sur la page, avec ce code :
    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
    #!/usr/bin/env perl
    use strict;
    use warnings;
    use diagnostics;
     
    my @liste = qw/cales abricot entonnoir couchette aïd arrosoir caleçon élève zozo/ ;
     
    @liste = sort @liste ;
    print join(' ' , @liste) . "\n" ;
     
    use locale ;
    @liste = sort @liste ;
    print "use locale : " ;
    print join(' ' , @liste) . "\n" ;
    no locale ;
     
    use utf8 ;
    @liste = sort @liste ;
    print "use utf8 : " ;
    print join(' ' , @liste) . "\n" ;
    no utf8 ;
    j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    abricot arrosoir aïd cales caleçon couchette entonnoir zozo élève
    use locale : aïd abricot élève arrosoir caleçon cales couchette entonnoir zozo
    use utf8 : abricot arrosoir aïd cales caleçon couchette entonnoir zozo élève

  10. #30
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    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 276
    Points : 12 717
    Points
    12 717
    Par défaut
    Je ne pense pas que cela soit un problème de locale, je pense que le souci est coté perl...

    On peut tester le trie depuis la commande sort pour voir:
    Avec la locale C (qui ne connait pas les accents)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ sed -n '/abricot/{s%.*qw/%%;s%/.*%%;s% %\n%g;p;}' fichier.pl | LC_COLLATE=C sort
    abricot
    arrosoir
    aïd
    cales
    caleçon
    couchette
    entonnoir
    zozo
    élève
    Avec la bonne locale
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ sed -n '/abricot/{s%.*qw/%%;s%/.*%%;s% %\n%g;p;}' fichier.pl | LC_COLLATE=fr_FR.utf8 sort
    abricot
    aïd
    arrosoir
    caleçon
    cales
    couchette
    élève
    entonnoir
    zozo
    Cordialement.

  11. #31
    Futur Membre du Club
    Homme Profil pro
    chômeur
    Inscrit en
    Juillet 2017
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : chômeur

    Informations forums :
    Inscription : Juillet 2017
    Messages : 39
    Points : 7
    Points
    7
    Par défaut
    Bizarre, avec ce deux lignes de commande je n'ai aucune sortie.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $ sed -n '/abricot/{s%.*qw/%%;s%/.*%%;s% %\n%g;p;}' zz.pl | LC_COLLATE=C sort
    $ sed -n '/abricot/{s%.*qw/%%;s%/.*%%;s% %\n%g;p;}' zz.pl | LC_COLLATE=fr_FR.utf8 sort
    $

  12. #32
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    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 276
    Points : 12 717
    Points
    12 717
    Par défaut
    Ici, tu n'auras une sortie que si le sed trouve le mot 'abricot'
    Cordialement.

  13. #33
    Futur Membre du Club
    Homme Profil pro
    chômeur
    Inscrit en
    Juillet 2017
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : chômeur

    Informations forums :
    Inscription : Juillet 2017
    Messages : 39
    Points : 7
    Points
    7
    Par défaut
    Pourtant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my @liste = qw/cales abricot entonnoir couchette aïd arrosoir caleçon élève zozo/ ;

  14. #34
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    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 276
    Points : 12 717
    Points
    12 717
    Par défaut
    Et si tu ne lance que la partie sed sans le sort ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    sed -n '/abricot/{s%.*qw/%%;s%/.*%%;s% %\n%g;p;}' zz.pl
    Cordialement.

  15. #35
    Futur Membre du Club
    Homme Profil pro
    chômeur
    Inscrit en
    Juillet 2017
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : chômeur

    Informations forums :
    Inscription : Juillet 2017
    Messages : 39
    Points : 7
    Points
    7
    Par défaut
    C'est dimanche, mauvais copié-collé, mauvais répertoire !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $ sed -n '/abricot/{s%.*qw/%%;s%/.*%%;s% %\n%g;p;}' zz.pl 
    cales
    abricot
    entonnoir
    couchette
    aïd
    arrosoir
    caleçon
    élève
    zozo
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    sed -n '/abricot/{s%.*qw/%%;s%/.*%%;s% %\n%g;p;}' zz.pl | LC_COLLATE=fr_FR.utf8 sort                        
    abricot                                   
    aïd                                       
    arrosoir                                  
    caleçon                                   
    cales                                     
    couchette                                 
    élève                                     
    entonnoir                                 
    zozo
    Cette fois-ci avec LC_COLLATE=fr_FR.utf8 j'ai le bon ordre de tri

  16. #36
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 276
    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 276
    Points : 12 717
    Points
    12 717
    Par défaut
    Question bête: tu n'aurais pas une variable "PERL_SKIP_LOCALE_INIT" de défini dans ton environnement ?
    Tu peux essayer de lancer ton script perl comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    env -u PERL_SKIP_LOCALE_INIT perl zz.pl
    Et sinon, que donne la commande:
    Cordialement.

  17. #37
    Futur Membre du Club
    Homme Profil pro
    chômeur
    Inscrit en
    Juillet 2017
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : chômeur

    Informations forums :
    Inscription : Juillet 2017
    Messages : 39
    Points : 7
    Points
    7
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $ perl -V:d_setlocale    
    d_setlocale='define';
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $ env -u PERL_SKIP_LOCALE_INIT perl zz.pl                                                                     
    abricot arrosoir aïd cales caleçon couchette entonnoir zozo élève                    
    use locale : aïd abricot élève arrosoir caleçon cales couchette entonnoir zozo       
    use utf8 : abricot arrosoir aïd cales caleçon couchette entonnoir zozo élève
    Je n'ai pas l'impression que ça change grand chose.

  18. #38
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Si dans ton terminal tu tapes: perl -E'say "\xC3\xAF"' ou plutôt printf "\xC3\xAF\n", ça affiche quoi?
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  19. #39
    Futur Membre du Club
    Homme Profil pro
    chômeur
    Inscrit en
    Juillet 2017
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : chômeur

    Informations forums :
    Inscription : Juillet 2017
    Messages : 39
    Points : 7
    Points
    7
    Par défaut
    Citation Envoyé par CosmoKnacki Voir le message
    Si dans ton terminal tu tapes: perl -E'say "\xC3\xAF"', ça affiche quoi?
    Il s'affiche "ï" (i tréma).

  20. #40
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Même chose en tapant printf "\xC3\xAF\n"?
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 3 PremièrePremière 123 DernièreDernière

Discussions similaires

  1. Trier par ordre alphabétique des onglets d'une certaine couleur
    Par shimuno dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/10/2011, 17h54
  2. Réponses: 6
    Dernier message: 13/01/2011, 08h31
  3. Réponses: 11
    Dernier message: 28/06/2010, 11h16
  4. Trier par ordre alphabétique un tableau
    Par barbiche dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 09/03/2007, 17h15
  5. Réponses: 1
    Dernier message: 27/05/2006, 23h13

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