Manipulation de tableaux en perl

Alain T -  
christophe1371 Messages postés 65 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

j'aurais besoin d'un peu d'aide ne Perl. Je fais du Perl 2 fois par ans, et je galère pas mal avec la manipulation de tableaux (je ne suis pas informaticien ni développeur, mais médecin).

Je pars de deux tableaux :
@Vrac = Lundi Novembre Mardi Mercredi
@Semaine = Lundi Mardi Mercredi Jeudi Vendredi Samedi Dimnanche

Je souhaiterais lire chaque valeur de mon tableau @Vrac, et vérifier la présence de la valeur en cours de lecture dans le tableau @Semaine.
Je voudrias alors nettoyer mon tableaun @Vrac de svaleurs non conformes (c'est à dire absentes du tableau) et mettre ces valeurs hors norme dans un tableau @anomalie.

Au final je souhaiterais avoir les tableaux suivants :
@Vrac = Lundi Mardi Mercredi
@anomalie = Novembre

Quelqu'un pourrait m'aider ?

Merci.

Alain.

3 réponses

lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
Salut,

root@debian:~# cat ccm.pl
#!/usr/bin/perl
use strict;use warnings;

my @vrac = qw/Lundi Novembre Mardi Mercredi/;
my @semaine = qw/Lundi Mardi Mercredi Jeudi Vendredi Samedi Dimanche/;

my %vu_dans_semaine;
my @pas_dans_vrac;
my(@normal,@anomalie);

@vu_dans_semaine{@semaine} = ();

for (@vrac){ push @anomalie,$_ unless exists $vu_dans_semaine{$_};
             push @normal,$_   if exists $vu_dans_semaine{$_}    }

print "\@normal = @normal\n\@anomalie = @anomalie\n";
__END__
root@debian:~# perl ccm.pl
@normal = Lundi Mardi Mercredi
@anomalie = Novembre
root@debian:~#
--

lami20j
2
lami20j Messages postés 21331 Date d'inscription   Statut Modérateur, Contributeur sécurité Dernière intervention   3 570
 
ou plus court avec l'opérateur ternaire ?:
#!/usr/bin/perl
use strict;use warnings;

my @vrac = qw/Lundi Novembre Mardi Mercredi/;
my @semaine = qw/Lundi Mardi Mercredi Jeudi Vendredi Samedi Dimanche/;

my %vu_dans_semaine;
my @pas_dans_vrac;
my(@normal,@anomalie);

@vu_dans_semaine{@semaine} = ();

for(@vrac){exists $vu_dans_semaine{$_}?push @normal,$_:push @anomalie,$_}

print "\@normal = @normal\n\@anomalie = @anomalie\n";
__END__
2
christophe1371 Messages postés 65 Date d'inscription   Statut Membre Dernière intervention   10
 
salut,

on utilise un tableau de hachage intermediaire (temp) pour pouvoir utiliser la fonction exists tres pratique pour vérifier si une clé existe

my @anomalie;
my @Vrac =(Lundi,Novembre,Mardi,Mercredi);
my @Semaine =(Lundi,Mardi,Mercredi,Jeudi,Vendredi,Samedi,Dimnanche);

my %temp;
@temp{@Semaine} = 0..$#Semaine;

for my $val (@Vrac) {
if( ! exists $temp{$val} ) {
push (@anomalie,$val);
}
1