Chercher element dans un tableau - Perl - Programmation
Marsh Posté le 15-12-2005 à 06:13:13
my $trouve;
my $elem;
foreach $elem (@montableau) {
$trouve = ($elem eq "truc a chercher" );
continue if $trouve;
}
-execute la commande- if $trouve;
Marsh Posté le 15-12-2005 à 07:14:11
Junt a écrit : Si cet élement est trouvé alors je sorts de la boucle et je ne fais rien. |
if ( scalar(grep(/truc à chercher/, @tableau)) ) |
Marsh Posté le 15-12-2005 à 11:26:06
regarde la doc sur la fonction next et last
sinon voilà :
Code :
|
Marsh Posté le 15-12-2005 à 14:56:34
il est formellement recommandé par larry wall (createur de perl) de pas utiliser les grep lorsqu'on ne recupere pas de resultat et il conseil de faire un foreach.
Code :
|
Marsh Posté le 15-12-2005 à 15:05:02
bioinfo_djib a écrit : il est formellement recommandé par larry wall (createur de perl) de pas utiliser les grep lorsqu'on ne recupere pas de resultat et il conseil de faire un foreach. |
if ( join("#", @tableau) !~ /truc à chercher/ ) |
(c'est juste pour embêter mon monde, je ne crois pas judicieux d'utiliser cette méthode sur de gros tableaux )
Marsh Posté le 15-12-2005 à 16:34:14
Bonjour,
Tout d'abord merci à tous pour vos réponses.
si je prends ton code bioinfo_djib, ce n'est pas tout à fait ce que je veux
Code :
foreach my $case (@montableau) {
if ($case eq "truc a chercher" ) {
last;
}
}
car si je ne trouve rien que se passe t'il? je ne peux pas faire un else dans la boucle foreach car sinon ma commande va être éxecutée autant de fois qu'il y a de $case alors que je veux qu'elle soit exécuter qu'une seule fois. Sinon le last marche bien pour quitter la boucle.
Ce soir, je vais tester les solutions de Elmoricq, je n'ai pas encore eu le temps.
En faite j'ai essayé de contourner le problème hier soir en passant par un tableau associatif et l'utilisation de exists.
=== il y a du code avant==
@ls = ( ma premiere liste)
$i ='0';
%list_search = ();
foreach $entry (@ls )
{
recuperation de donnees et je veux recuperer le contenu de $valueString
$list_search{$valueString} = $i;
}
if ( exists $list_search{"letruc que je cherche}}) {
print "c'est Deja present \n";
}else {
system (J'execute ma commande});
print "Commande executée \n";
}
et je n'ai pas le problème de boucle et la commande ne s'execute bien qu'une seule fois
Mais si je me heurte à un bug je serais vers où regarder next, last, grep.
Merci
Junt
Marsh Posté le 15-12-2005 à 16:44:53
use List::Util "first";
my $first = first {$_ eq "truc à chercher"} @liste;
unless ($first) {
...
}
first fonctionne comme grp sauf qu'il stop à la premiere occurence vraie.
Il est implementé en C et List::Util fait partie du CORE de perl, donc aucune raison de ne pas l'utiliser
Marsh Posté le 14-12-2005 à 22:04:37
Bonjour à tous ,
J'aimerais chercher un élément dans un tableau .
Si cet élement est trouvé alors je sorts de la boucle et je ne fais rien.
Si cet élement n'est pas trouvé une fois avoir chercher dans tout le tableau alors j'execute une commande.
J'ai essayé avec un foreach $var (@mon tableau) mais ca ne fonctionne pas car si $var n'est pas l élément que je cherche alors il execute la commande! alors que je ne veux éxecuter cette commande qu'une seule fois...
je pensais passer par une variable intermediaire, ou un while, until?
Merci d'avance de votre aide.
Junt