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 :

Changer chaque caractère d'une chaîne


Sujet :

Langage Perl

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 161
    Points : 116
    Points
    116
    Par défaut Changer chaque caractère d'une chaîne
    Bonjour,
    J'aimerais changer chaque caractère d'une chaîne. Pour cela j'ai fait ce code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      my $MaChaine = '25785498789548';
      for ($i=1; $i<=14; $i++) {
        $MaChaine [$i]=chr(ord($MaChaine [$i])+22);
      }
      print $MaChaine ;
    Mais ça ne marche pas, car à la fin je récupère la chaîne de départ sans modification.
    Avez une idée d'où pourrait venir mon problème?
    Merci d'avance pour l'aide que vous pourrez m'apporter.

  2. #2
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 867
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 867
    Points : 4 873
    Points
    4 873
    Par défaut
    Salut

    Mmm, j'ai pas trop regardé ton code. Mais je te conseille de coir sur notre FAQ plus précisément cette partie. Je suis certain que ça t'aidera.

    @++

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 210
    Points : 99
    Points
    99
    Par défaut
    Tu veut obtenir quoi comme résultat a la fin de ton programme ?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 161
    Points : 116
    Points
    116
    Par défaut
    GLDavid > Je viens de regarder ce que tu m'as conseillé, mais je ne trouve pas comment changer un caractère par rapport à sa position.
    Il y a bien comment changer un caractère par rapport à sa valeur mais pas suivant la position (dans mon exemple $i).
    Je suis désolé je passe de Delphi à Perl et j’ai du mal à faire la transition. Je passe mon temps à chercher les fonctions que j’utilisais dans Delphi pour les utiliser dans perl.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 161
    Points : 116
    Points
    116
    Par défaut
    vodevil > J'aimerais obtenir ma chaîne de départ avec chaque caractère ayant leur code ascii incrémenté de 22. Pour en fait me retrouver avec des lettres plutôt que des chiffres.

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 210
    Points : 99
    Points
    99
    Par défaut
    Voici une partie de la solution qui fonctionne sauf que le premier caractères en l'occurence ici 2 est sacrifié , mais je vais te trouver sa t'inquiète voici le new soft


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #!/usr/bin/perl
     
      $MaChaine = '25785498789548';
      for $T( $MaChaine ) {
      @MaChaine2 = split //, $MaChaine;
      }
     
      for ($i=1; $i<=14; $i++) { 
        @MaChaine2[$i]=chr(ord(@MaChaine2 [$i])+22); 
      } 
      print @MaChaine2;
    Ce programme retourne le résultat suivant
    2KMNKJONMNOKJN

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 161
    Points : 116
    Points
    116
    Par défaut
    Cool merci et pour le "2" il doit falloir commencer la boucle avec $i=0.
    Je vais tester ca

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 210
    Points : 99
    Points
    99
    Par défaut
    Oki

  9. #9
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 161
    Points : 116
    Points
    116
    Par défaut
    Ca a l'air de marcher, merci beaucoup.
    C'est vrai que je n'avais pas pensé à faire un split sur du vide pour séparer chaque caractère.
    Changer de langage c'est difficile car on garde les vieilles habitudes.

  10. #10
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Personellement, soit j'utiliserais substr() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    #!/usr/bin/perl 
    use strict;
    use warnings;
     
    my $MaChaine = '25785498789548'; 
    foreach my $i ( 0.. (length($MaChaine) - 1) ){ 
        substr( $MaChaine, $i, 1, chr(ord( substr( $MaChaine, $i, 1 ) )+22); 
    } 
    print $MaChaine;
    soit je ferais directement un map() et join() après le split() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #!/usr/bin/perl 
    use strict;
    use warnings;
     
    my $MaChaine = '25785498789548'; 
    $MaChaine = join('', (map {chr(ord( $_ )+22)} (split //, $MaChaine) ) ); 
    print $MaChaine;
    C'est plus perlien.

    --
    Jedaï

  11. #11
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 161
    Points : 116
    Points
    116
    Par défaut
    Jedai > Merci, c'est vrai que la deuxième méthode allège pas mal le code.

  12. #12
    Membre actif
    Inscrit en
    Février 2005
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 167
    Points : 203
    Points
    203
    Par défaut
    Citation Envoyé par Jedai
    je ferais directement un map() et join() après le split() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #!/usr/bin/perl 
    use strict;
    use warnings;
     
    my $MaChaine = '25785498789548'; 
    $MaChaine = join('', (map {chr(ord( $_ )+22)} (split //, $MaChaine) ) ); 
    print $MaChaine;
    C'est plus perlien. :D

    --
    Jedaï
    à perlien je dis perlien et demi :)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    #!/usr/bin/perl -wl
    use strict;
    use warnings;
     
    my $MaChaine = '25785498789548';
    $MaChaine =~ tr/0-9/F-O/;
    print $MaChaine;
    N

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    161
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 161
    Points : 116
    Points
    116
    Par défaut
    lol merci à tous.
    Je pense que là j'ai assez de choix.
    Je viens de changer pour utiliser la solution de nematoad.

  14. #14
    Membre actif Avatar de scifire
    Inscrit en
    Juillet 2004
    Messages
    226
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 226
    Points : 245
    Points
    245
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $_ = "123456789";
    s/([0-9])/chr(ord($1)+22)/ge;

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

Discussions similaires

  1. Accéder à chaque caractère d'une chaîne utf-8
    Par bosse dans le forum Langage
    Réponses: 3
    Dernier message: 12/05/2014, 11h32
  2. Réponses: 2
    Dernier message: 27/03/2008, 04h17
  3. Changer un caractère dans une chaîne contenue dans une phrase
    Par cirtey dans le forum Algorithmes et structures de données
    Réponses: 9
    Dernier message: 07/03/2007, 16h16
  4. Réponses: 5
    Dernier message: 03/02/2006, 18h47
  5. [String] Remplacement caractères dans une chaîne
    Par Crazyblinkgirl dans le forum Langage
    Réponses: 4
    Dernier message: 19/07/2004, 11h15

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