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 :

Accents et majuscules


Sujet :

Langage Perl

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 391
    Points : 124
    Points
    124
    Par défaut Accents et majuscules
    Bonjour,

    j'utilise uc pour changer de case (minuscule en majuscule) mais les caractères accentués ne sont pas transformés.
    Par exemple :
    marché devient MARCHé

    Merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    open(OUT,"$OUT")or die("err lecture $Fichier : $! \n");
      while(my $line= <OUT>)
      {
       chomp($line);
       open(FICH,">>$home_fichiers/troc.xml"); $trocxml=uc($line);$trocxmldesc = $description;
       print FICH fich($trocxml,$trocxmldesc,$attribut_troc_multivalue); close FICH;
      }
      close(OUT);

  2. #2
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 39
    Points : 30
    Points
    30
    Par défaut
    il faudrait utiliser en plus de uc
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $ligne =~ tr/àéèù/ÀÉÈÙ/g ;
    ou combiner les deux en une seule instruction à savoir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $ligne =~ tr/[a-z]àéèù/[A-Z]ÀÉÈÙ/g ;
    Ici je me contente des a, e, u accent grave et e accent aigu, il faut bien sûr rajouter les accents circonflexes et trémas ...

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 391
    Points : 124
    Points
    124
    Par défaut
    Re,
    oui mais il n'existe pas de solution plus simple prenant en compte tous les accents et les transformant en majuscule sans accent ?

    De plus comment mettre cette ligne tr dans le code
    $line = ...

    Merci.

  4. #4
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    use utf8;
    my $nom = "éric noël";
    print uc($nom), "\n";

  5. #5
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 39
    Points : 30
    Points
    30
    Par défaut
    Citation Envoyé par falco- Voir le message
    Re,
    oui mais il n'existe pas de solution plus simple prenant en compte tous les accents et les transformant en majuscule sans accent ?
    à ma connaissance, non ... Il faudrait procéder du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $line =~ tr/àéèù/aeeu/g ;
    Citation Envoyé par falco- Voir le message
    De plus comment mettre cette ligne tr dans le 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
     
    open(OUT,"$OUT")or die("err lecture $Fichier : $! \n");
      while(my $line= <OUT>)
      {
       chomp($line);
       open(FICH,">>$home_fichiers/troc.xml"); 
       $line =~ tr/àâäéèù/ÀÂÄÉÈÙ/g ;      # si tu veux conserver les accents !!!
    #  $line =~ tr/àâäéèù/aaaeeu/g ;      # si tu veux les enlever, dans ce cas tu peux écrire indifféremment le 3e bloc en minuscule et seront ensuite transformés par uc, ou en majuscule et resteront en majuscule par uc ...
    #  $line =~ tr/[a-z]àâäéè/[A-Z]AAAEE/g ;    # Cette version rend uc inutile car effectue la transformation en majuscules, ici les minuscules accentuées sont transformées en majuscules sans accents
       $trocxml=uc($line);
       $trocxmldesc = $description;
       print FICH fich($trocxml,$trocxmldesc,$attribut_troc_multivalue); close FICH;
      }
      close(OUT);
    Edit : grillé
    mais ça suppose que l'on travaille bien avec un jeu de caractère UTF-8 !!!

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 391
    Points : 124
    Points
    124
    Par défaut
    Bonjour,
    en mettant use utf8 j'obtiens en sortie les bons caractères mais en utf 8 ce qui peut être génant.

    En utilisant sans le g ça plante ! :
    $line =~ tr/[a-z]àâäéè/[A-Z]ÀÂÄÉÈÙ/

    j'obtiens :SECRÉTAIRE ce qui parait ok



    $line =~ tr/[a-z]àâäéè/[A-Z]AAAEE/

    j'obtiens :SECRAUTAIRE !!!

    Je voudrais des Majuscules sans accent. Je ne comprends pas bien ce qui se passe.

    Fichier source :
    Gestionnaire
    Directeur
    Secrétaire

  7. #7
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 39
    Points : 30
    Points
    30
    Par défaut
    euh après vérification, le g final n'est pas utile avec tr ... de plus les crochets entourant a-z et A-Z ne servent à rien ... pourtant ça devrait marcher ...

    Citation Envoyé par http://www.ac-creteil.fr/util/programmation/perl/cours/tp-regex0.html
    # pour convertir la ligne saisie en minuscules
    $ligne =~ tr/A-Z/a-z/ ;
    # pour remplacer les caractère accentués (à compléter)
    $ligne =~ tr/àéèeçù/aeeecu/ ;
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $line = tr/a-zàâäéèêëîïù/A-ZAAAEEEEIIU/ ;
    devrait fonctionner ... Je ne vois vraiment pas pourquoi dans ton 2e exemple, tr te remplace le caractère É par la combinaison AU ...
    Dans ton premier exemple, fais bien gaffe à ce que le nombre de caractère soit le même dans la 1e et dans la 2e expression ...

  8. #8
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    Citation Envoyé par falco- Voir le message
    Bonjour,
    en mettant use utf8 j'obtiens en sortie les bons caractères mais en utf 8 ce qui peut être génant.
    Pourquoi donc? Unicode gère l'accentuation, latin-1 (ou -15) non. T'as donc le choix entre utiliser use utf8; et que ça fonctionne comme tu veux ou tu vas devoir manuellement changer chaque caractère.

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 391
    Points : 124
    Points
    124
    Par défaut
    Re,
    oui mais en n'utilisant pas tr avec use utf8 j'obtiens les accents avec les autres caractères en majuscule.
    Comme SECRéTAIRE

    Je désire n'avoir que des majuscules sans accents.

    Est-ce que quelqu'un aurait une idée pourquoi il y a ce changement ( :SECRAUTAIRE)

    Les causes ? Je n'y comprends plus rien ....

    Exemple sorti de mon programme général :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $OUT = "toto";
    open(OUT,"$OUT")or die("err lecture $Fichier : $! \n");
    open(T,">tutu")or die("err lecture $Fichier : $! \n");
      while(my $line= <OUT>)
        {
              $line =~ tr/a-zàâäéèêëîïù/A-ZAAAEEEEIIU/;
     
              print T $line;
     
                      }
                        close(OUT);
    avec toto
    éarRT

    J'obtiens tutu :
    AIARRT

    !!!!!!!!!!

    Un peu d'aide Merci !

  10. #10
    Nouveau membre du Club
    Inscrit en
    Août 2007
    Messages
    39
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 39
    Points : 30
    Points
    30
    Par défaut
    essayes une simple suppression des accents, puis conversion en maj avec uc ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $line =~ tr/àâäéèêëù/aaaeeeeu/ ;
    $trocxml=uc($line);
    ça me surprend énormément de voir que tr remplace un caractère accentué par deux caractères sans accent ...

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 391
    Points : 124
    Points
    124
    Par défaut
    Bonjour,
    en fait en cherchant le problème provient de :
    - les caractères reçus sont en utf8
    - la variable ENV de l'émulation est en utf8

    ---> les caractères sont donc transformés en utf8.

    J'ai fait un test en modifiant la valeur ENV et en mettant mon putty en iso-latin1
    la transformation tr fonctionne avec un fichier source saisi par moi même

    Mais bien sûr ceci ne résout pas mon problème !

    Voici ce que j'ai fait et qui fonctionne lancé sur la machine qui possède ENV en utf8

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $OUT = "toto";
    open(OUT,"$OUT")or die("err lecture $Fichier : $! \n");
    open(T,">tutu")or die("err lecture $Fichier : $! \n");
      while(<OUT>)
        {
               s/é/E/g;
               s/ô/O/g; # et le reste ...
              print T $_;
     
                      }
                        close(OUT);
                        close(T);

  12. #12
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    Citation Envoyé par falco- Voir le message
    Bonjour,
    en fait en cherchant le problème provient de :
    - les caractères reçus sont en utf8
    - la variable ENV de l'émulation est en utf8

    ---> les caractères sont donc transformés en utf8.
    Ce qui me ramène à ma question: pourquoi ne pas tout simplement utiliser use utf8; et tous les problèmes disparaissent.

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 391
    Points : 124
    Points
    124
    Par défaut
    Merci pour votre réponse

    Mais si j'utilise utf8 comment transformer les accents en majuscule ?
    (sachant que les fichiers générés ne devront pas contenir d'accent)

    Si je rajoute dans le précédent programme use utf8;
    la conversion via s/// ne se fait pas alors que si je l'enlève c'est ok.

    Merci.

  14. #14
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    Comme je l'ai montré précédemment, le script suivant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    use utf8;
     
    my $string = 'éric noël';
    print uc($string), "\n";
    va écrire ÉRIC NOËL au terminal. Une fois en UTF-8, la relation uppercase/lowercase des caractères accentués fonctionne.

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 391
    Points : 124
    Points
    124
    Par défaut
    re,

    merci pour la réponse mais je ne veux pas de majuscules accentuées.
    Je reste donc sur mon dernier programme qui fonctionne.
    Je reste perplexe tout de même ...

    Merci.

  16. #16
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803

  17. #17
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 391
    Points : 124
    Points
    124
    Par défaut
    Merci pour ce lien très utile.
    Je reste sur mon programme tout de même.

    Je garde ce lien de coté ...

    Merci.

  18. #18
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 391
    Points : 124
    Points
    124
    Par défaut accents problème difficile à resoudre
    Voici

    si j'ajoute ou pas
    use utf8;

    c'est pareil :
    Le fichier de travail est :
    M 303 211 D E C I N E \n (pour MÉDECINE)

    le fichier transmis généré contient :
    exemple j'obtiens :
    <key>MÃ<89>DECINE</key>
    soit M 303 211 D E C I N E
    mais s'affciche dans putty via vi en MÃ<89>DECINE

    Merci

  19. #19
    Membre éclairé
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Points : 803
    Points
    803
    Par défaut
    Assure-toi que ton term et putty sont configurés en UTF-8.

  20. #20
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    391
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 391
    Points : 124
    Points
    124
    Par défaut
    oui pas de problème.
    il est en utf8.
    Merci

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [AJAX] Suppression des accents et majuscules
    Par Tefonline dans le forum AJAX
    Réponses: 2
    Dernier message: 29/05/2009, 09h14
  2. [RegEx] regex majuscule avec accent
    Par zobsystem dans le forum Langage
    Réponses: 5
    Dernier message: 22/06/2007, 16h29
  3. Probleme avec accent majuscule
    Par cerede2000 dans le forum Requêtes
    Réponses: 5
    Dernier message: 14/02/2007, 14h26
  4. mettre en majuscule avec accent
    Par nicerico dans le forum Langage
    Réponses: 1
    Dernier message: 06/11/2006, 08h21
  5. Gestion des majuscules des miniscules des accent
    Par issam16 dans le forum Access
    Réponses: 2
    Dernier message: 13/07/2006, 14h21

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