Précédent   Forum du club des développeurs et IT Pro > Autres langages > Perl > Langage
Langage Toutes vos questions sur les scripts Perl en général. Avant de poster, veuillez consulter les FAQs perl, les cours Perl, les critiques de livres et les sources Perl.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 30/11/2012, 16h13   #1
vince2005
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 511
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 511
Points : 32
Points : 32
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
vince2005 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2012, 19h42   #2
Lolo78
Membre Expert
 
Homme Laurent R.
Conseil - Consultant en systèmes d'information
Inscription : mai 2012
Messages : 570
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 : 570
Points : 1 121
Points : 1 121
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"
__________________
Sauf mention contraire explicite, les bouts de code que je poste en réponse à une question n'ont pas forcément été testés.
Lolo78 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/12/2012, 18h56   #3
vince2005
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 511
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 511
Points : 32
Points : 32
Bonjour,

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

Merci
vince2005 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 23h04.


 
 
 
 
Partenaires

Hébergement Web