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 :

Remplacement de caractéres dans une chaine


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre à l'essai
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 5
    Par défaut Remplacement de caractéres dans une chaine
    Bonjour a tous,

    Je débute en Perl, et cherche a faire les choses suivantes. J'ai bien regardé les tutoriaux et cherché un peu partout sur google, mais si j'ai trouvé des informations je n'ai malheureusement pas réussi a les coller bout a bout ... j'espére donc que je pourrais trouver de l'aide ici

    Je m'explique: j'ai une chaine de caractére (en l'occurence un nom de fichier) sur lequel je cherche a remplacer tous ses caractéres spéciaux ainsi qu'a remplacer ses espaces avec des underscore, mais en conservant son extension.

    Pour l'heure j'ai essayé les chaines suivantes, avec les résultats indiqués:
    - => marche bien mais je perds mes espaces ainsi que le point de l'extension, donc trop radical
    -
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $_ = $oStripAccents->strip($_);
    => pour enlever les accents mais j'obtiens des erreurs a la compilation (Can't call method "strip" on an undefined value at C:\PERL\test.pl line 23.)
    - => me met bien des underscores a la place des espaces mais je ne réussis pas a le combiner avec un moyen d'enlever également les accents.

    Si une bonne ame pouvait donc bien m'éclaire sur ce qui ne va pas ?

    Merci d'avance !

    Cdlt,

    Jtybt

  2. #2
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    Fais-le en plusieurs étapes.

    Remplacer les accents par les caractères non-accentué:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $string =~ tr/éèêàâîôùûç/eeeaaiouuc/;
    Remplacer les espaces:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $string =~ s/\s/_/g;
    Supprimer les autres caractères non alphabétiques:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $string =~ s/[^\w.]//g;
    Tu mets les trois lignes ci-dessus (dans cet ordre) dans ton programme et tu devrais avoir à peu près ce que tu cherches.

    Pour les accents, ajoute les trémas si besoin.

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Par défaut
    Il existe (au moins) deux modules du CPAN pour le traitement des accents :
    - Text::StripAccents
    - Text::Unaccent (existe en version pure perl : http://search.cpan.org/~pjacklam/Tex...cent::PurePerl)

  4. #4
    Membre à l'essai
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Juin 2014
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 5
    Par défaut
    Extra, merci beaucoup Lolo78 !

    Si maintenant je souhaite remplacer les caractéres accentués par leur correspondant sans accent (e a la place de é ou è p. ex), ca peut se faire via une expression réguliére ou faut passer par tr/ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïñòóôõöùúûüýÿ/AAAAAACEEEEIIIINOOOOOUUUUYaaaaaaceeeeiiiinooooouuuuyy/; ?

  5. #5
    Rédacteur/Modérateur

    Avatar de Lolo78
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Mai 2012
    Messages
    3 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2012
    Messages : 3 612
    Billets dans le blog
    1
    Par défaut
    Disons que tr/// est beaucoup beaucoup plus rapide qu'une expression régulière. Il serait en outre bien plus difficile de tout faire en une seule expression régulière.

Discussions similaires

  1. Remplacement de caractères dans une chaines
    Par jeanmi681 dans le forum Langage
    Réponses: 9
    Dernier message: 18/06/2009, 16h06
  2. Remplacer des caractères dans une chaine et enlever certains
    Par Lucas Panny dans le forum SL & STL
    Réponses: 6
    Dernier message: 12/01/2009, 14h26
  3. Réponses: 4
    Dernier message: 14/11/2008, 21h00
  4. Remplacer des caractères dans une chaine interbase 7.5
    Par zaydoun_391 dans le forum InterBase
    Réponses: 1
    Dernier message: 15/04/2008, 16h57
  5. Réponses: 4
    Dernier message: 29/08/2006, 17h44

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