p
u
b
l
i
c
i
t
é
publicité
  1. #1
    Nouveau Membre du Club
    Inscrit en
    mars 2006
    Messages
    585
    Détails du profil
    Informations forums :
    Inscription : mars 2006
    Messages : 585
    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 741
    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 741
    Points : 4 687
    Points
    4 687
    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"
    La programmation fonctionnelle en Perl : 1. les opérateurs de liste; 2. les fonctions d'ordre supérieur; 3. étendre le langage.
    De Perl 5 à Perl 6 : 1. Les bases; 2. Les nouveautés; 3. Approfondissements

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

    Par défaut

    Bonjour,

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

    Merci

Discussions similaires

  1. Réponses: 6
    Dernier message: 19/03/2007, 20h04
  2. create table as :correspondance de syntaxe avec oracle
    Par slausseur dans le forum MS SQL-Server
    Réponses: 2
    Dernier message: 14/03/2007, 10h34
  3. requête table de correspondance
    Par RodEpsi dans le forum Access
    Réponses: 4
    Dernier message: 19/02/2007, 20h06
  4. Requete avec une table de correspondance.
    Par gregb34 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 19/02/2007, 18h53
  5. Datawarehouse et table de correspondance
    Par Adi81 dans le forum Alimentation
    Réponses: 4
    Dernier message: 31/05/2005, 18h39

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