Rechercher : dans
Par :

[PERL] Test appartenance a liste

Dernière réponse le 13 mar 2009 à 08:47:17 Qwerti, le 15 jui 2008 à 01:53:40 
 Signaler ce message aux modérateurs

Bonjour a tous,

Je voudrai savoir s'il y a une commande pour tester l'appartenance a une liste/tableau :



# J'ai une liste/tableau :
my @t = ( 'element 1', 'element 2', 'element 3');

# et disons deux variables :
my $elementTRUE = 'element 2';
my $elementFALSE = 'element 4';




Et je voudrai savoir s'il existe un moyen tres compact de tester l'appartenance des
variables $elementTRUE et $elementFLASE a @t, sans avoir a ecrire explicitement la
boucle de test.


Merci d'avance pour vos reponses !
- Qwerti.

Configuration: Windows XP
Firefox 3.0

Meilleures réponses pour « [PERL] Test appartenance a liste » dans :
Les variables avec Perl Voir Concept de variable avec Perl Une variable est un objet repéré par son nom, pouvant contenir des données, qui pourront être modifiées lors de l'exécution du programme. Les variables en langage Perl peuvent être de trois...
[Windows] Obtenir la liste des fichiers d'un dossier VoirLister le contenu d'un dossier Voici une astuce simple qui permet de lister le nom des fichiers contenus dans un répertoire. Vous pourrez obtenir en un clic les titres de vos chansons, de vos photos, etc. dans un fichier...
Commandes IP relatives aux réseaux sous Windows VoirIl est parfois très utile de connaître les commandes IP, pour analyser voire configurer ses réseaux TCP/IP. Voici la liste de ces commandes à utiliser dans une fenêtre DOS...
[MS-Dos] Lister le contenu d'un répertoire dans un fichier VoirIl peut s'avérer pratique d'effectuer le listage d'un ou plusieurs répertoires dans un fichier, afin de tenir par exemple un catalogue de fichiers. Sous MS-Dos (ou sous Windows en ouvrant une fenêtre d'invite de commande MS-Dos) il est possible...
Perl - Les structures conditionnelles VoirQu'est-ce qu'une structure conditionnelle? On appelle structure conditonnelle les instructions qui permettent de tester si une condition est vraie ou non. Ces structures conditionnelles peuvent être associées à des structures qui se répètent...
PHP - Expressions régulières VoirQu'est-ce qu'une expression régulière? Les expressions régulières sont des modèles créés à l'aide de caractères ASCII permettant de manipuler des chaînes de caractères, c'est-à-dire permettant de trouver les portions de la chaîne correspondant au...
Listes et énumérations en HTML VoirLes listes Une liste est un paragraphe structuré contenant une suite d'articles. Le langage HTML définit trois types de listes : La liste ordonnée ; La liste non ordonnée ; La liste de définition. Liste ordonnée Conteneur Type de...

1

hasterix, le 12 mar 2009 à 23:11:37
  • +1

Salut !

Il y a une méthode simple pour faire cela : une expression régulière.

Il suffit de savoir que l'expression "@tab" correspond à la concaténation des éléments de @tab.

On peut alors écrire :

$val="Valeur a chercher";
if ( "@tab" =~ /$val/) {
print "la valeur est dans le tableau\n";
} else {
print "la valeur n'est PAS dans le tableau\n";
}

voila !
:-)

Répondre à hasterix

3

 lami20j, le 13 mar 2009 à 08:47:17

Salut,

"@tab" correspond à la concaténation des éléments de @tab
Pas tout à fait.
L'interpolation de @t donne la liste des éléments séparés par un espace (ce n'est pas une concaténation)
Un exemple

lami20j@debian:~$ perl vider.pl
a b c d e f g h i j k l m n o p q r s t u v w x y z
abcdefghijklmnopqrstuvwxyz
lami20j@debian:~$ cat vider.pl
#!/usr/bin/perl
use strict;use warnings;

my @t='a'..'z';

# l'interpolatoin de @t
my $elementstab="@t";
print "$elementstab\n";
# la concatenation des éléments de @t
my $concatenation = join "",@t;
print "$concatenation\n";
__END__
lami20j@debian:~$ perl vider.pl
a b c d e f g h i j k l m n o p q r s t u v w x y z
abcdefghijklmnopqrstuvwxyz
Pour traiter les éléments d'une liste on utilise en général foreach ou for.
foreach my $element(@tab){
....traitement...
}
D'autres fonction qui peuvent être utiliser : grep, map, join, pack, sort, pop, push, shift, unshift, splice
106485010510997108

Répondre à lami20j

2

lami20j, le 13 mar 2009 à 08:20:38
  • +1

Salut,

D'autres possibilités

lami20j@debian:~/trash$ cat ccm_grep.pl
#!/usr/bin/perl
#use strict;use warnings;

my @t = ( 'element 1', 'element 2', 'element 3');
print "\@t = @t\n";
print "\n","*" x 20,"\n\n";

# affiche seulement les éléments trouvés
my @cherche = grep{ /element\s*[24]/ } @t;
print "Trouvés : @cherche\n";

# ligne de séparation
print "\n","*" x 20,"\n\n";

# affiche les éléments trouvés et non trouvés
for my $e('element 2', 'element 4'){
  if (grep { /$e/ } @t){
    print "$e trouvé\n";
  }else{
    print "$e non trouvé\n";
  }
}

lami20j@debian:~/trash$ perl ccm_grep.pl
@t = element 1 element 2 element 3

********************

Trouvés : element 2

********************

element 2 trouvé
element 4 non trouvé
106485010510997108

Répondre à lami20j