Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1615 connectés 

  FORUM HardWare.fr
  Programmation
  Perl

  Chercher element dans un tableau

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Chercher element dans un tableau

n°1266826
Junt
Posté le 14-12-2005 à 22:04:37  profilanswer
 

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

mood
Publicité
Posté le 14-12-2005 à 22:04:37  profilanswer
 

n°1266925
Madking
Posté le 15-12-2005 à 06:13:13  profilanswer
 

my $trouve;
my $elem;
 
foreach $elem (@montableau) {
 $trouve = ($elem eq "truc a chercher" );
 continue if $trouve;
}
-execute la commande- if $trouve;

n°1266929
Elmoricq
Modérateur
Posté le 15-12-2005 à 07:14:11  profilanswer
 

Junt a écrit :

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.


 

if ( scalar(grep(/truc à chercher/, @tableau)) )
{
   # exécuter la commande voulue
}


Message édité par Elmoricq le 15-12-2005 à 07:14:43
n°1267041
bioinfo_dj​ib
Posté le 15-12-2005 à 11:26:06  profilanswer
 

regarde la doc sur la fonction next et last
sinon voilà :

Code :
  1. foreach my $case (@montableau) {
  2.    if ($case eq "truc a chercher" ) {
  3.         last;
  4.    }
  5. }

n°1267360
ledzep2
Posté le 15-12-2005 à 14:36:26  profilanswer
 

Elmoricq je pense est la mieux...

n°1267397
bioinfo_dj​ib
Posté le 15-12-2005 à 14:56:34  profilanswer
 

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 :
  1. Évitez d'utiliser grep() (ou map()) ou des « backticks » (`) dans un contexte vide, c'est-à-dire, quand vous ne récupérez pas les valeurs qu'elles retournent. Ces fonctions retournent toujours des valeurs alors, utilisez-les. Sinon, utilisez une boucle foreach() ou l'appel system() à la place.

n°1267409
Elmoricq
Modérateur
Posté le 15-12-2005 à 15:05:02  profilanswer
 

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/ )
{
    # exécuter la commande
}


 
 
(c'est juste pour embêter mon monde, je ne crois pas judicieux d'utiliser cette méthode sur de gros tableaux [:ddr555] )


Message édité par Elmoricq le 15-12-2005 à 15:05:35
n°1267661
Junt
Posté le 15-12-2005 à 16:34:14  profilanswer
 

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

n°1267689
pospos
Posté le 15-12-2005 à 16:44:53  profilanswer
 

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


Message édité par pospos le 15-12-2005 à 16:45:53

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Perl

  Chercher element dans un tableau

 

Sujets relatifs
tableau: 100% en hauteurSuppression d'element dans une liste
[C] question passage d'un tableau a plusieurs dim en parametreTri dans un tableau (débutant inside)
probleme avec tableauinitialiser un tableau 2D ds le main
[VB6] traitement sur tableau excel très lent [résolu][VBA Excel] Bloquer les barres de défilement à la fin d'un tableau
[xml] récupérer tout le texte d'un élement ?Trier meilleurs scores dans un tableau
Plus de sujets relatifs à : Chercher element dans un tableau


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR