Manipulation de tableaux en perl

Fermé
Alain T - 24 oct. 2007 à 15:14
christophe1371 Messages postés 65 Date d'inscription mardi 14 décembre 2004 Statut Membre Dernière intervention 12 décembre 2012 - 24 oct. 2007 à 15:59
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 jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
24 oct. 2007 à 15:46
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 jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
24 oct. 2007 à 15:51
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 mardi 14 décembre 2004 Statut Membre Dernière intervention 12 décembre 2012 10
24 oct. 2007 à 15:59
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