Recherche dans la colonne délimitée des valeurs dans la liste<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Bonjour les gars de JMP,
J'utilise souvent contient rechercher dans une colonne les valeurs d’une liste. Quelque chose comme ça:
match_list = { "AAA" , "CCC" } ;
single_rows = dt << obtenir des rangées où ( contient ( match_list , : Valeur unique )) ;
C'est un moyen très pratique de rechercher une colonne contenant des valeurs uniques. Cependant, il est souvent nécessaire d'effectuer une recherche similaire dans laquelle la colonne contient plusieurs valeurs séparées par un délimiteur (généralement un point-virgule).

Ma question: existe-t-il un moyen astucieux de rechercher une colonne de valeurs délimitées de la même manière que la méthode décrite ci-dessus? Je peux utiliser des expressions régulières pour rechercher une valeur unique dans la colonne à valeurs multiples. Cependant, je dois rechercher dans la colonne à valeurs multiples de nombreuses valeurs contenues dans une liste.
Voici du code qui génère la table ci-dessus et illustre la méthode contient sur une colonne à valeur unique.
dt = Nouvelle table ( "Searchtbl" , Ajouter des lignes ( 6 ) ,
Nouvelle colonne ( "Valeur unique" , Personnage , Nominal ,
Définir des valeurs ( { "AAA" , "BBB" , "CCC" , "DDD" , "EEE" , "FFF" } ) ) ,
Nouvelle colonne ( "Valeur délimitée" , Personnage , Nominal ,
Définir des valeurs ( { "AAA" , "AAA; BBB; CCC; DDD; EEE" , "BBB; CCC; DDD" , "BBB; DDD; EEE; AAA" ,
"BBB; EEE" , "FFF; BBB" } )
)
) ;
match_list = { "AAA" , "CCC" } ;
single_rows = dt << obtenir des rangées où ( contient ( match_list , : Valeur unique )) ;
Re: Recherche colonne délimitée pour les valeurs dans la listeSi vous n'avez pas les nitems, je pense que les << obtenir des lignes où () cherchera un booléen et à la place une liste. Avec les nitems, s'il n'y a pas d'intersections, il n'y aura rien dans la liste, donc faux.
Re: Recherche colonne délimitée pour les valeurs dans la listeWow Vince c'est fabuleux. Je l'ai bricolé et ai mis au point une fonction qui emprunte énormément à ce poste de MS: Re: moyen rapide de comparer deux listes (éléments rares)?
Voici un exemple de code. Il s'avère que vous n'avez pas besoin de la construction [row ()]. Mais pourquoi avez-vous besoin de nitems?
list_intersect = une fonction ( // voit quels éléments de list_1 sont dans list_2
{ list_1 , liste_2 } ,
{ DEFAUT LOCAL } ,
intersect_list = Tableau associatif ( list_1 ) << couper ( Tableau associatif ( liste_2 ) ) << getkeys ;
) ;
liste1 = { "Pomme" , "poire" , "Orange" , "kiwi" , "pastèque" , "mangue" , "citron" , "poire bosc" } ;
liste2 = { "Pomme" , "poire" , "kiwi" , "Orange" , "fraise" , "pastèque" , "melon" } ;
dt = Nouvelle table ( "temp" ,
Nouvelle colonne ( "Fruit" , personnage , setvalues ( liste1 || liste2 ) )
) ;
list1_rows = dt << Obtenez des rangées où ( nitems ( list_intersect ( Mots ( : Fruit , ";" ) , liste1 ))) ;
list2_rows = dt << Obtenez des rangées où ( nitems ( list_intersect ( Mots ( : Fruit , ";" ) , liste2 ))) ;
Re: Recherche colonne délimitée pour les valeurs dans la listeJe devais créer une fonction pour le faire. mais cela semble fonctionner
list_doge = une fonction ( // voit quels éléments de list_1 sont dans list_2
{list_1, list_2}, {DEFAULT LOCAL},
aa1 = tableau associatif (list_1);
aa2 = tableau associatif (liste_2);
aa1 << couper (aa2);
aa1 << obtenir des clés ;
)
dt << Obtenez des rangées où ( nitems (list_doge ( Mots (: Valeur délimitée [ rangée ()], ";" ), match_list)))