Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Nouveau Membre du Club
    Inscrit en
    mars 2006
    Messages
    553
    Détails du profil
    Informations forums :
    Inscription : mars 2006
    Messages : 553
    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é

    Homme Profil pro Laurent R.
    Conseil - Consultant en systèmes d'information
    Inscrit en
    mai 2012
    Messages
    1 266
    Détails du profil
    Informations personnelles :
    Nom : Homme Laurent R.
    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 266
    Points : 2 847
    Points
    2 847

    Par défaut

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

    Code :
    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 :
    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 :
    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 :
    1
    2
    3
    my $var2 = "45A69M";
    $var2 =~tr/AJBKSCLTDMUENV/11222333444555/;
    print $var2; # imprime "451694"
    Mes articles sur La programmation fonctionnelle en Perl publiés sur ce site:

    ________
    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
    553
    Détails du profil
    Informations forums :
    Inscription : mars 2006
    Messages : 553
    Points : 36
    Points
    36

    Par défaut

    Bonjour,

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

    Merci

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •