le 02-25-2016 07:53 AM
Bonjour,
Comment peut on rechercher des éléments dans un tableau à n dimension, en d'autre terme effectuer une recherche comme dans excel: rechercheV?
merci pour vosponse
le 02-25-2016 08:49 AM
Avec des boucles "For" imbriqués, tu peux parcourrir tes éléments.
Par contre, pour répondre correctement à ta question, il faudrait plus de détails, et si possible le code de ta première tentative.
Les informations manquantes sont :
- Taille de l'élement recherche : 1 portion de tableau , 1 seul élément.
- Nombre de fois que l'élement se trouve dans le tableau : 1 fois, N fois....
- Type de tableau : Chaine / Numérique
Cdt,
Michael
le 02-25-2016 09:17 AM
voici un code qui te mermet de faire une recherche sur un Tableau comportant un nombre quelconque de dimensions (ici 4)
Le Tableau de sortie te donne les "coordonnées" du 1er élément trouvé.
Si le 1er élément du tableau " result " = -1 ... alors l'élément recherché n'existe pas.
ci-joint code LV2014
le 02-25-2016 09:33 AM
Sympatique ce code.
Pour l'améliorer, je mettrais ta boucle "FOR" dans un case, qui permettrait de sauter cette partie de code en cas de "-1" en sortie de recherche, évitant de perdre du temps pour rien, en cas d'appel récursif :).
Et pour faire une recherche multi-élément, il suffit de mettre ta fonction rechercher dans une boucle while avec l'offset de départ en registre à décalage.
Cf pièce jointe 😉 histoire de complexifier le code de Ouadji XD
le 02-25-2016 09:48 AM
Sympatique ce code. merci
je profite du polymorphisme des fonctions "Reshape Array" et "Array Size"
oui ... la strucure Case pour bypasser directement en cas de "-1" ...
J'y avais pensé ... j'ai conservé le code "sans" pour "faire au plus simple"
Mais je suis d'accord ... une structure Case "en plus", c'est mieux.
le 02-25-2016 10:01 AM
Merci pour votre réponse,
je précise mon souhait:
-Je voudrait à partir d'une liste de paramètres d'entrée:par exemple je rentre ces paramètres: type d'outil (texte), type de matériaux(texte),module de la dent (numérique)etc... et ainsi recherché l'élément numérique( vitesse de rotation)qui correspond à la combinaison de ces paramètres, sachant que je récupére ce tableau de donnée à partir d'excel, j'ai ajouter la partie pour récupérer le fichier excel mais après je sais pas comment chercher mes éléments sur ce fichier, sachant que il faudrait concaténer ces 3 chaines et recherché dans le tableau
En entrée j'ai: 3 chaines et une constante et en sorti je voudrait un élément numérique (qui correspond à la vitesse de rotation)
ci joint j'ai mis le fichier excel et mon début de code (j'ai juste récupérer le code exemple de NI)
le 02-25-2016 10:05 AM
Attention ... je viens de m'en apercevoir ...
mon code ne fonctionne que si la dimension du Tableau est > 1 ! (pas de limites supérieures, mais n > 1)
Pour pouvoir accepter n=1, il faut prévoir du code de "test" (test et structure Case) .. et si n=1, passer sur la fonction "Search D Array" seule.
02-25-2016 10:12 AM - modifié 02-25-2016 10:14 AM
Je ne peux pas ouvrir ton exemple en lv2015.
Voilà comment je m'y prendrais.
1-Je récupère les données de mon fichier excel
2- Je stocke mes données d'entrée dans un tableau de cluster (3élements : outil/Matériaux/Dents), et ma données de sortie dans un tableau de numérique (vitesse de rotation)
3- Je récupère le cluster de recherche de mon utilisateur, et avec la fonction "search in 1D Array" je trouve la position dans mon tabealu de cluster
4- Avec la fonction "indexer un tableau 1D" je récupère la vitesse de rotation à partir de l'indice obtenu dans la recherchde mon tableau de cluster.
CQFD.
Fourni ton vi en version LV2011 ou 2014, et je te le met en place 😉
EDIT : Avec cluster en définition de type 😉 Comme cela si un jour tu ajoutes des paramètres d'entrées, ca s'adapte 😉
le 02-25-2016 10:14 AM
négatif ...
impossible de résoudre le cas de " n = 1 " avec une Structure Case.
On tombe sur un soucis de polymorphisme !!! Donc mon code n'est valable que si n > 1
Ceci dit, je ne vois pas bien comment on pourrait (avec LV) injecter des Tableaux de tailles différentes à l'entrée d'un code.
Donc si on a un Tableau à une seule dimension ... on le sait à l'avance ... et on utilise la fonction Search 1D seule.
02-25-2016 10:17 AM - modifié 02-25-2016 10:18 AM
En passant par un variant, et une variable de dimension, tu peux rendre ton VI "polymorphe" ^^, mais bon après suffit d'ajouter un cas de détection de la dimension pour éviter ton bout de code
Et pour connaitre la dimension de ton tableau, tu te bases sur la taille de ton tableau de dimension XD.... C'est clair dans ma tête à vous de décrypter après