Discussions au sujet de NI LabVIEW

annuler
Affichage des résultats de 
Rechercher plutôt 
Vouliez-vous dire : 

manipulation tableau

Résolu !
Accéder à la solution

Bonjour,

 

  Je commence a avoir pas mal d'heure au compteur en Labview mais la je butte ... Je voudrais séparer un tableau 1D en deux tableaux 1D de la façon suivante :

 

en entrée j'ai un tableau de cette forme :

 

PicPic_0-1594276516053.png

et je souhaite récupérer en sortie deux tableaux de cette forme :

 

PicPic_1-1594276575132.png

 

 

Merci d'avance 

0 Compliments
Message 1 sur 5
1 495 Visites

Bonjour PicPic,

 

Le critère de séparation repose sur le contenu des éléments de type chaîne du tableau. Il faut donc traiter les chaînes, il n'y aura pas de solution immédiate en utilisant une ou deux fonctions LabVIEW.

 

J'aurais tendance à mettre en place un parser, qui prendra dans une boucle tous les éléments du tableau d'entrée, afin d'isoler par ligne, puis en faisant la séparation (signe égal) des deux parties attendues en sortie. La boucle permettra de reconstruire en parallèle les deux tableaux action et paramètres.

 

Pour le parsing en lui-même, essayez de voir ce qu'il est possible de faire avec la fonction Spreadsheet String To Array. En jouant sur le séparateur, il doit être possible (en deux temps) de récupérer chacun des éléments action = paramètre (sans le point-virgule peut être), puis de séparer les actions du paramètre.

 

Le pendant de la fonction Spreadsheet String To Array, Array To Spreadsheet String, devrait vous permettre de "réassembler" la liste des actions ou des paramètre pour un élément du tableau de sortie

 

Cordialement,

0 Compliments
Message 2 sur 5
1 486 Visites

Mon problème se pose lorsque j'ai plusieurs lignes dans la même cellule .... J'ai tenté diverse chose tel que faire une boucle while dans le for et de récupérer le restant de la cellule avec un registre a décalage etc mais sans succès....  

PicPic_2-1594280596269.png

 

 

 

0 Compliments
Message 3 sur 5
1 480 Visites
Solution
Accepté par l'auteur du sujet PicPic

Voici une proposition avec une expression régulière pour le parsing :

 

Parsing using Regular ExpressionParsing using Regular Expression

 

Il faut effectivement parcourir la chaîne, c'est l'objet de la boucle While et du registre à décalage portant l'offset / offset past match - on commence bien évidemment à zéro.

 

Dans l'expression régulière :

  • Je recherche deux sous ensembles, spécifiés entre parenthèses, et qui me seront retournés dans les terminaux en bas (le nœud peut être étendu, un peu comme le build array). Pas de restrictions particulière, on attend n'importe quel caractère (point), avec 0 à n occurrences (étoile);
  • La mention [\s*] autorise 0 à n occurrences du caractère espaces (Cf. aide de la fonction Match Pattern). On le retrouve trois fois, entre la fin du paramètre et le caractère égal, entre le caractère égal et l'action, et finalement entre l'action et le point-virgule:

Les deux résultats, paramètre et action sont auto-indexés, de façon conditionnelle pour ne pas rajouter inutilement la dernière ligne, quand la fonction ne "trouve pas" et renvoie deux chaînes vides.

 

Enfin, la fonction Array To Spreadsheet String permet de reconstituer une chaîne unique à partir du tableau.

 

L'expression régulière fonctionne pour cet exemple, il y aurait peut être d'autres cas à traiter. SI vous ne connaissez pas cet outil (qui n'est pas spécifique à LabVIEW), je ne peux que vous encourager à explorer les expressions régulière, c'est très puissant. A titre personnel, c'est un outil que j'aime beaucoup !

 

Bonne continuation,

0 Compliments
Message 4 sur 5
1 474 Visites

Merci ! 

 

  J'ai encore appris quelque chose je ne savais pas que l'on pouvait séparer avec le:

Match Regular Expression Function

 

  Je l'ai toujours utilisé sous sa "forme basique" mais cette petite option est méga pratique. 

 

Merci beaucoup 

0 Compliments
Message 5 sur 5
1 465 Visites