1. #1
    Nouveau Membre du Club
    Inscrit en
    mars 2006
    Messages
    581
    Détails du profil
    Informations forums :
    Inscription : mars 2006
    Messages : 581
    Points : 36
    Points
    36

    Par défaut Table de correspondance

    Bonjour,

    je souhaiterai faire un programme qui renvoie à une tale de correspondance.

    Par example :

    A,J => 1
    B,K,S=>2
    C,L,T=>3
    D,M,U=>4
    E,N,V=>5

    Pour aprés pouvoir transposer cette table de corresponande à ma variable $var2.

    Par exemple :
    My $var2=45A69M

    Au final, je prends chaque caractere de ma variable et si je recontre une lettre comme A, je la remplace par rapport à la valeur de ma table de correspondance.
    soit $var2=451694
    Le A et le M ont été remplacé par la valeur numérique 1 et 4.

    Je pensais mettre en place une table de hachage, mais je n'ai trop d'idées sur sa contrusction.

    Merci pour votre aide

  2. #2
    Expert Confirmé Sénior


    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mai 2012
    Messages
    1 676
    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 : 1 676
    Points : 4 314
    Points
    4 314
    Billets dans le blog
    1

    Par défaut

    Oui, tu peux construire un hash, par exemple comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    my %transco = ( 
         A => 1,
         J => 1,
         B => 2,
         K => 2,
         # etc.
    )
    Ensuite, il suffit de splitter la variable en entrée et d'effectuer les substitutions:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    my $var2 = "45A69M";
    my @letters = split //, $var2;
    my @letters_out = map { $_ = $transco{$_} if defined $transco{$_}; $_} @letters;
    my $result = join "",  @letters;
    (On peut faire plus concis et se passer des variables intermédiaires, par exemple en faisant pour les lignes 2 et 3:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    my @letters_out = map { $_ = $transco{$_} if defined $transco{$_}; $_} split //, $var2;
    De même pour le join. Mais peu importe, car on peut faire mieux.)


    Il y a en fait bien plus simple, la fonction tr//:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    my $var2 = "45A69M";
    $var2 =~tr/AJBKSCLTDMUENV/11222333444555/;
    print $var2; # imprime "451694"
    Articles sur La programmation fonctionnelle en Perl : 1. les opérateurs de liste; 2. les fonctions d'ordre supérieur; 3. étendre le langage.
    Tutoriels De Perl 5 à Perl 6: 1. Les bases du langage; 2. Les nouveautés.

    ________
    Sauf mention contraire explicite, les bouts de code que je poste en réponse à une question n'ont pas forcément été testés.

  3. #3
    Nouveau Membre du Club
    Inscrit en
    mars 2006
    Messages
    581
    Détails du profil
    Informations forums :
    Inscription : mars 2006
    Messages : 581
    Points : 36
    Points
    36

    Par défaut

    Bonjour,

    Merci pour ta réponse. La fonction tr est encore plus simple à mettre en oeuvre.

    Merci

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