Comment utiliser Select Where () avec Contains () pour rechercher des correspondances partielles dans le tableau de données ?j'ai une liste
myParaList = {Current_I20_, Voltage_CIB_, Capacitance_DIFF_, Resistance_FURR_};et un tableau de données avec une colonne appelée Paramètre avec plusieurs lignes, dont certaines ont des entrées comme
Current_I20_Stage2
Voltage_CIB_Stage3
Capacitance_DIFF_corner_Stage1
Resistance_FURR__side_Stage3
En utilisant ma liste avec Contient() pour extraire les noms complets des paramètres de la table de données dans une liste. Comment faire cela via JSL ?
Pour commencer, ce qui suit ne sélectionne rien dans ma table de données. Où est-ce que je me trompe ?
dt<< select where(Contains(mylist, As column (Parameter)));
Automatisation et scriptsles fenêtresRe : Comment utiliser Select Where() avec Contains() pour trouver des correspondances partielles dans le tableau de données ?Essayez d'ajouter des crochets vides après la parenthèse fermante de votre appel de fonction.
dt<< select where(Contains(mylist, As column (Parameter)[]));
Re : Comment utiliser Select Where() avec Contains() pour trouver des correspondances partielles dans le tableau de données ?Vous avez besoin de correspondances complètes lorsque vous utilisez contain avec une liste. Vous pouvez utiliser Word() pour que les valeurs de votre table de données soient au même format que votre liste, puis utiliser contain (convertir également la liste en liste de chaînes)
Names Default To Here(1);
dt = New Table("Untitled 2",
Add Rows(6),
Compress File When Saved(1),
New Column("param",
Character,
"Nominal",
Set Values(
{"Current_I20_Stage2", "Voltage_CIB_Stage3", "Capacitance_DIFF_corner_Stage1",
"Resistance_FURR__side_Stage3", "a", "b"}
)
)
);
my_list = {"Current_I20_", "Voltage_CIB_", "Capacitance_DIFF_", "Resistance_FURR_"};
rows = dt << Get Rows Where(Contains(my_list, Word([1 2], :param, "_") || "_"));
vals = dt[rows, "param"];
</CODE></P>
<P> </P></LINGO-BODY><LINGO-SUB id="lingo-sub-710241" slang="en-US" mode="NONE">Re : Comment utiliser Select Where() avec Contains() pour trouver des correspondances partielles dans le tableau de données ?</LINGO-SUB><LINGO-BODY id="lingo-body-710241" slang="en-US" mode="NONE"><P>Voici ce que je fais lorsque je recherche des correspondances partielles.</P>
<PRE><CODE class=" language-jsl">dt = New Table( "TestRegex", Add Rows( 8 ),
New Column( "TestCol", Character, "Nominal",
Set Values(
{"Current_I20_Stage2", "xyz", "Capacitance_DIFF_corner_Stage1", "lmnop",
"aaa", "Voltage_CIB_Stage3", "Voltage_CIB_Stage3",
"Resistance_FURR__side_Stage3"}
)
)
);
myList = {"Current_I20_", "Voltage_CIB_", "Capacitance_DIFF_", "Resistance_FURR_"};
for (i = 1, i <= nitems(mylist), i++,
match_rows = dt << get rows where(! is missing(regex(as column(dt, "TestCol"),
mylist[i], "\0", ignorecase)));
print(match_rows);
);
Re : Comment utiliser Select Where() avec Contains() pour trouver des correspondances partielles dans le tableau de données ?@jthi Cela fonctionne mais ne semble pas honorer les lignes masquées et exclues du tableau de données dt .
Je souhaite exclure certaines lignes basées sur une autre colonne de ma table de données comme dans JSL ci-dessous. Peut-être que cela pourrait être fait dans Obtenir les lignes où () ?
Names Default To Here(1);
clear log ();
dt = New Table("Untitled 2",
Add Rows(6),
Compress File When Saved(1),
New Column("param",
Character,
"Nominal",
Set Values(
{"Current_I20_Stage2", "Voltage_CIB_Stage3", "Capacitance_DIFF_corner_Stage1",
"Resistance_FURR__side_Stage3", "a", "b"}
)
),
New Column("Group",
Character,
"Nominal",
Set Values(
{"A", "B", "C", "D", "E", "F"}
)
),
);
ToHideAndExcludeList = {"A", "D", "F"};
dt << Select Where( Contains(ToHideAndExcludeList, :Group) );
sr = dt << Invert Row Selection;
sr << Hide and Exclude;
my_list = {"Current_I20_", "Voltage_CIB_", "Capacitance_DIFF_", "Resistance_FURR_"};
rows = dt << Get Rows Where(Contains(my_list, Word([1 2], :param, "_") || "_"));
vals = dt[rows, "param"];
Re : Comment utiliser Select Where() avec Contains() pour trouver des correspondances partielles dans le tableau de données ?Vous pouvez inclure l'état de la ligne comme autre condition.
Re : Comment utiliser Select Where() avec Contains() pour trouver des correspondances partielles dans le tableau de données ?@Mark_Bailey Merci. Voulez-vous dire utiliser Row State avec Contains ? Puis-je avoir un exemple s'il vous plaît ?
Re : Comment utiliser Select Where() avec Contains() pour trouver des correspondances partielles dans le tableau de données ?Cela devrait fonctionner.
Names Default To Here( 1 );
Clear Log();
dt = New Table( "Untitled 2",
Add Rows( 6 ),
Compress File When Saved( 1 ),
New Column( "param",
Character,
"Nominal",
Set Values( {"Current_I20_Stage2", "Voltage_CIB_Stage3", "Capacitance_DIFF_corner_Stage1", "Resistance_FURR__side_Stage3", "a", "b"} )
),
New Column( "Group", Character, "Nominal", Set Values( {"A", "B", "C", "D", "E", "F"} ) ),
);
ToHideAndExcludeList = {"A", "D", "F"};
dt << Select Where( Contains( ToHideAndExcludeList, :Group ) );
sr = dt << Invert Row Selection;
sr << Hide and Exclude;
my_list = {"Current_I20_", "Voltage_CIB_", "Capacitance_DIFF_", "Resistance_FURR_"};
exrows = dt << Get Excluded Rows;
rows = dt << Get Rows Where( All( Contains( my_list, Word( [1 2], :param, "_" ) || "_" ), Contains( exrows, Row() ) == 0 ) );
vals = dt[rows, "param"];Re : Comment utiliser Select Where() avec Contains() pour trouver des correspondances partielles dans le tableau de données ?@mmarchandTSI Merci beaucoup. Cela fonctionne, mais j'aurais préféré une approche où l'on pourrait filtrer par état de ligne (comme @Mark_Bailey suggéré) sous Contient () . Cela éviterait toute manipulation de table de données.
Re : Comment utiliser Select Where() avec Contains() pour trouver des correspondances partielles dans le tableau de données ?Vous pouvez utiliser !Exclude() et !Hidden() mais Contains() semble faire des trucs amusants dans ce cas, vous devez donc gérer cela, All() semble fonctionner dans ce cas
Names Default To Here(1);
Clear Log();
dt = New Table("Untitled 2",
Add Rows(6),
Compress File When Saved(1),
New Column("param",
Character,
"Nominal",
Set Values(
{"Current_I20_Stage2", "Voltage_CIB_Stage3", "Capacitance_DIFF_corner_Stage1",
"Resistance_FURR__side_Stage3", "a", "b"}
)
),
New Column("Group", Character, "Nominal", Set Values({"A", "B", "C", "D", "E", "F"})),
);
ToHideAndExcludeList = {"A", "D", "F"};
dt << Select Where(Contains(ToHideAndExcludeList, :Group));
sr = dt << Invert Row Selection;
sr << Hide and Exclude;
dt << Clear Select;
my_list = {"Current_I20_", "Voltage_CIB_", "Capacitance_DIFF_", "Resistance_FURR_"};
rows = dt << Get Rows Where(All(Contains(my_list, Word([1 2], :param, "_") || "_")) & !Excluded() & !Hidden());
vals = dt[rows, "param"];
Modifier:
Ou une expression d'évaluation
rows = dt << Get Rows Where(Eval(EvalExpr((Contains(my_list, Expr(Word([1 2], :param, "_") || "_"))))) & !Excluded() & !Hidden());
Re : Comment utiliser Select Where() avec Contains() pour trouver des correspondances partielles dans le tableau de données ?Oui, combinez plusieurs conditions avec And() pour faire correspondre les chaînes des lignes qui ne sont actuellement ni masquées ni exclues. Il y a une explication complète et de nombreux exemples ici .
Re : Comment utiliser Select Where() avec Contains() pour trouver des correspondances partielles dans le tableau de données ?@Mark_Bailey C'est fait, je n'obtiens aucune erreur mais cela ne sélectionne rien dans le tableau de données.