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 :

rechercher et remplacer


Sujet :

Langage Perl

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Février 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 15
    Par défaut rechercher et remplacer
    salut a tous
    Je vous fait part de mon soucis
    et bien suite a un casse tete perl selon le quel il fallait faire un shuffle pour par la suite extraire les 5 premieres cartes j'y suis parvenu avec le script ci dessous. cependant la seconde question est de remplacer dans ce top 5 les initiales des cartes par leur noms
    Q=Qeens
    K=King
    J=Jack
    S=Spades
    D=Diamonds
    C=Clubs
    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
    22
    23
    24
    #!/usr/bin/perl
     
    @startingdeck = ("A H","2 H","3 H","4 H","5 H","6 H","7 H","8 H",
                     "9 H","10 H","J H","Q H","K H",
                     "A D","2 D","3 D","4 D","5 D","6 D","7 D","8 D",
                     "9 D","10 D","J D","Q D","K D",
                     "A C","2 C","3 C","4 C","5 C","6 C","7 C","8 C",
                     "9 C","10 C","J C","Q C","K C",
                     "A S","2 S","3 S","4 S","5 S","6 S","7 S","8 S",
                     "9 S","10 S","J S","Q S","K S");
    for $x(0..99){
        @shuffle=(
            shift(@startingdeck),
            pop(@startingdeck),
            shift(@startingdeck),
            pop(@startingdeck),
            shift(@startingdeck),
            pop(@startingdeck),
            shift(@startingdeck),
            pop(@startingdeck),
    );
       push@startingdeck, @shuffle;
    }
       print"@startingdeck[0..4]\n";
    R = 4 D 9 C 3 S A S 8 D
    helas j'ai tout essayer mais rien a faire je n'y parvient pas ,ma derniere tentative ave seach and replace ne marche que pour un seul element a la fois .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if ($deck =~ s/Q/Qeens/){
     print "$deck\n";
    Merci de bien vouloir me donner un coup de pouce

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    L'énoncé de ton problème n'est pas clair.

  3. #3
    Membre averti
    Inscrit en
    Février 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 15
    Par défaut
    et bien je reformule
    si j'execute le script suivant:

    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
    22
    23
    24
    #!/usr/bin/perl
     
    @startingdeck = ("A H","2 H","3 H","4 H","5 H","6 H","7 H","8 H",
                     "9 H","10 H","J H","Q H","K H",
                     "A D","2 D","3 D","4 D","5 D","6 D","7 D","8 D",
                     "9 D","10 D","J D","Q D","K D",
                     "A C","2 C","3 C","4 C","5 C","6 C","7 C","8 C",
                     "9 C","10 C","J C","Q C","K C",
                     "A S","2 S","3 S","4 S","5 S","6 S","7 S","8 S",
                     "9 S","10 S","J S","Q S","K S");
    for $x(0..99){
        @shuffle=(
            shift(@startingdeck),
            pop(@startingdeck),
            shift(@startingdeck),
            pop(@startingdeck),
            shift(@startingdeck),
            pop(@startingdeck),
            shift(@startingdeck),
            pop(@startingdeck),
    );
       push@startingdeck, @shuffle;
    }
       print"@startingdeck[0..4]\n";
    voici le resultat:

    4 D 9 C 3 S A S 8 D

    et bien il est question de faire en sorte que les lettres qui apparaisent soit remplacer par des noms (si c'est Q=Qeens,K=King ,A=Ace, J=Jack,S=Spades,D=Diamonds,C=Clubs) donc dans le cas de figure le resultat
    4 D 9 C 3 S A S 8 D
    devient alors:

    4 Diamonds 9 Clubs 3 Spades Ace Spades 8 Diamonds
    merci de vos lumieres

  4. #4
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    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
    22
    23
    24
    25
    26
    #!/usr/bin/perl
    use strict;
    use Carp;
    use warnings;
    use List::Util qw(shuffle);
     
    my %correspondance = (
      Q => 'Qeens',
      K => 'King',
      J => 'Jack',
      S => 'Spades',
      D => 'Diamonds',
      C => 'Clubs',
    );
    my @startingdeck = shuffle(
      "A H",  "2 H", "3 H", "4 H", "5 H", "6 H", "7 H", "8 H", "9 H", "10 H", "J H",  "Q H",
      "K H",  "A D", "2 D", "3 D", "4 D", "5 D", "6 D", "7 D", "8 D", "9 D",  "10 D", "J D",
      "Q D",  "K D", "A C", "2 C", "3 C", "4 C", "5 C", "6 C", "7 C", "8 C",  "9 C",  "10 C",
      "J C",  "Q C", "K C", "A S", "2 S", "3 S", "4 S", "5 S", "6 S", "7 S",  "8 S",  "9 S",
      "10 S", "J S", "Q S", "K S"
    );
     
    for ( 0 .. 3 ) {
      my ( $col1, $col2 ) = split( /\s+/, $startingdeck[$_] );
      print "$col1 $correspondance{$col2}\n";
    }
    4 Clubs
    8 Spades
    5 Spades
    6 Clubs

  5. #5
    Membre averti
    Inscrit en
    Février 2007
    Messages
    15
    Détails du profil
    Informations forums :
    Inscription : Février 2007
    Messages : 15
    Par défaut
    Merci Bien
    mais hélas ça dénature mon obligation d'utiliser pop et shift
    ce sera chouette d'avoir une possibilité tout en préservant a la fois l'usage de pop et de shift dans le code.

    Merci de ton aide

  6. #6
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 822
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 822
    Par défaut
    Je ne vois pas en quoi tu ne peux pas te passer de pop ou shift. En même si tu devais les utiliser, je ne vois pas ton souci. Le code ci-dessus permet de te monter comment arriver à ton but facilement et simplement en utilisant un hash. A toi de l'adapter comme tu veux.

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

Discussions similaires

  1. [VBA] Rechercher et remplacer dans un champs
    Par virginie2 dans le forum Access
    Réponses: 2
    Dernier message: 19/07/2006, 11h19
  2. Afficher, rechercher et remplacer dans un fichier
    Par lynal dans le forum Langage
    Réponses: 1
    Dernier message: 13/06/2006, 21h24
  3. Recherche et remplacement d'un caractère dans Word
    Par faiglon dans le forum Access
    Réponses: 3
    Dernier message: 13/02/2006, 14h17
  4. [RegEx] Rechercher et remplacer plusieurs occurences avec expression
    Par nabab dans le forum Langage
    Réponses: 2
    Dernier message: 12/12/2005, 17h12
  5. Réponses: 11
    Dernier message: 01/12/2004, 19h09

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