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. #41
    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
    Même sortie avec printf : ï

  2. #42
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 274
    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 274
    Points : 12 709
    Points
    12 709
    Par défaut
    Là, je commence à sécher...

    Ton sort avec le use locale à le même comportement pour moi, quand j'utilise le sort de la classe unicode::Collate

    sinon, peux-tu tester le perl (exact) ci dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #!/usr/bin/env perl
     
    my @liste = qw/cales abricot entonnoir couchette aïd arrosoir caleçon élève zozo/ ;
    use locale;
    print join(' ',sort(@liste))."\n";
    Attention: le lancer comme ceci et donner le résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    bash -c "ltrace perl xyz3.pl" 2>&1 | grep -A 1 strxfrm
    Ensuite, supprimer ou commenter la ligne 'use locale' et relancer la même commande.

    Ceci, c'est pour vérifier que le sort passe bien par l'appel système de transformation quand on utilise la locale.
    Cordialement.

  3. #43
    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 ou sans use locale je n'ai aucune sortie (j'ai vérifié aussi sans le grep, c'est ok).

  4. #44
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 274
    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 274
    Points : 12 709
    Points
    12 709
    Par défaut
    Sans le grep, tu devrais avoir une multitude de sortie sur l'écran...

    Si tu n'as rien, c'est qu'il y a un souci.
    Cordialement.

  5. #45
    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
    Non non, sans le grep j'ai bien plein de lignes, mais avec je n'ai rien.

  6. #46
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 274
    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 274
    Points : 12 709
    Points
    12 709
    Par défaut
    Voici une alternative qui devrait fonctionner:

    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
    #!/usr/bin/env perl
    use strict;
    use warnings;
    use diagnostics;
     
    use POSIX qw(strcoll strxfrm);
     
    my @liste = qw/cales abricot entonnoir couchette aïd arrosoir caleçon élève zozo/ ;
    # sans la locale
    print join(' ',sort  @liste) . "\n";
     
    # Première méthode avec locale
    print join(' ',sort {strxfrm($a) cmp strxfrm($b)} @liste) . "\n";
     
    # Deuxième  méthode avec locale (certainement plus rapide que la première)
    print join(' ',sort {strcoll($a,$b)} @liste) . "\n";
    Cordialement.

  7. #47
    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
    Impeccable, ça fonctionne :
    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
    abricot aïd arrosoir caleçon cales couchette élève entonnoir zozo
    abricot aïd arrosoir caleçon cales couchette élève entonnoir zozo
    Tu peux m'expliquer tout ça ?

  8. #48
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 274
    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 274
    Points : 12 709
    Points
    12 709
    Par défaut
    Je ne sais pas pourquoi chez toi, l'utilisation du use locale ne fonctionne pas (au moins pour le tri), et donc je te fait passer par ce quoi il passe quand il fonctionne.

    les fonctions de la libc:
    strxfrm( str ) ==> retourne une chaine transformée de str pour pouvoir la comparer à une autre chaine transformée.
    strcoll ==> retourne le résultat comparatif de 2 chaines.
    En fait strcoll(s1,s2) est égale à strxfrm(s1) cmp strxfrm(s2) ...

    Dans les fait, perl appelle strxfrm avec le use locale (enfin, en principe), mais dans la doc perllocale, il déconseille de l'utiliser (suite à un souci possible dans le cas d'un seul caractère).

    Et sinon, à titre informatif, la commande sort de linux utilise strcoll.

    En bref, je t'ai fourni juste un contournement pour ta version de perl qui semble ne pas gérer correctement le module locale.
    Cordialement.

  9. #49
    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 te remercie.
    C'est donc un bug lié à mon système, ce que je trouve très embarrassant, mais contournable grâce à toi.

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

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