Empiler plusieurs paramètres avec condition avec JSLJ'ai obtenu un ensemble de données avec plusieurs paramètres avec un certain format "TestNumber;TestName". Je sais que nous pouvons facilement y accéder manuellement. Mais
Je veux tous les empiler avec JSL de manière intelligente. Comment faire cela en JSL ? S'il vous plaît aviser. Merci
Re : Empiler plusieurs paramètres avec condition avec JSLSalut promz,
Merci pour les bons conseils ! Ça marche comme un champion !Re : Empiler plusieurs paramètres avec condition avec JSLVous deviez convertir les noms de colonnes en chaîne.De plus, one_col n'est pas une liste.Voici le code corrigé.Je vous encourage à
a) Lire les manuels de script
b) Vérifiez fréquemment le journal pour les valeurs des variables, les messages d'erreur, etc.
c) Continuez à utiliser ce forum de discussion
Names Default To Here( 1 );
sourceTable = Data Table( "FINAL" );
col_list = sourceTable << get column names( continuous, string );
stackcols = {};
//one_col = {};
For( i = 1, i <= N Items( col_list ), i++,
one_col = col_list[i];
show(one_col, i);
If( Regex( one_col, "(\d+);(\S+)" ) == one_col,
Insert Into( stackcols, one_col )
);
);
resultTable = sourceTable << Stack(
columns( stackcols ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
);
resultTable << setName( (sourceTable << getName) || " Stacked Data" );Re : Empiler plusieurs paramètres avec condition avec JSLMerci pmroz. J'ai modifié le script selon votre suggestion, mais j'ai l'impression de rencontrer une erreur.
Names Default To Here( 1 );
sourceTable = Data Table( "FINAL" );
col_list = sourceTable << get column names( continuous );
stackcols = {};
one_col = {};
For( i = 1, i <= N Items( col_list ), i++,
one_col = col_list[i];
If( Regex( one_col, "(\d+);(\S+)" ) == one_col,
Insert Into( stackcols, one_col )
);
);
resultTable = sourceTable << Stack(
columns( stackcols ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
);
resultTable << setName( (sourceTable << getName) || " Stacked Data" );
/************************************
Erreur inconnue dans la correspondance de modèle lors de l'accès ou de l'évaluation de 'Regex' , Regex/*###*/(one_col, "(\d+);(\S+)")
Re : Empiler plusieurs paramètres avec condition avec JSLcol_list = {"2010;PinShort@CLK", "2011;PinShort@IO", "2012;PinShort@VDD", "Label", "Data"};
stackcols = {};
for (i = 1, i <= nitems(col_list), i++,
one_col = col_list[i];
if (regex(one_col, "(\d+);(\S+)") == one_col,
insertinto(stackcols, one_col);
);
);
Re : Empiler plusieurs paramètres avec condition avec JSLBonjour Nelson,
Je comprends parfaitement. Et pourtant, mon problème est exactement ce que vous mentionnez ci-dessus, "comment remplir la liste stackCols" avec ma condition paramétrique avec l'expression régulière "(\d+);(\S+)".
Merci quand même. Je vais essayer de faire des essais et des erreurs moi-même.Re : Empiler plusieurs paramètres avec condition avec JSL@OneNorthJMP ,
Je crois que ce que Ian vous a montré correspond à ce que vous demandez.Ce que Ian a montré, c'est ce que vous devez faire, c'est créer une liste (stackCols) dans votre JSL qui contient les noms des colonnes que vous souhaitez empiler, puis exécuter le morceau de code au bas de son script :
resultTable = sourceTable << Stack(columns(stackCols), Source Label Column( "Label" ), Stacked Data Column( "Data" ));
resultTable << setName((sourceTable << getName)||" Stacked Data");
Le problème est donc que vous remplissiez la liste stackCols.La façon dont vous procédez dépend de vos besoins.Cela peut être aussi simple que d'utiliser
stackCols = dt << get column names( continuous );
pour remplir la liste.Ou cela peut nécessiter une méthodologie plus complexe.Mais ce que Ian a montré, c'est à quel point il est simple d'exécuter la Stack Platform avec les données que vous avez actuellement dans votre table de données.
Re : Empiler plusieurs paramètres avec condition avec JSLSalut Ian,
Merci pour votre réponse. Peut-être que mon explication n'est pas claire. Je souhaite que le script JSL puisse adapter différents paramètres de différentes tables d'entrée.
Par exemple, saisissez le tableau 1, j'ai 2 colonnes. Je dois modifier le JSL ci-dessous.
Data Table( "FINAL.jmp" ) << Stack(
columns(
:Name( "2010;PinShort@CLK" ),
:Name( "2011;PinShort@IO" ),
:Name( "2012;PinShort@VDD" ),
:Name( "2013;PinShort@LA" ),
:Name( "2014;PinShort@LB" ),
:Name( "2030;PinOpen@CLK" )
),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
)
Par exemple, saisissez le tableau 2, si j'ai 3 colonnes. Je dois modifier le JSL ci-dessous.
Data Table( "FINAL.jmp" ) << Stack(
columns( :Name( "2010;PinShort@CLK" ), :Name( "2011;PinShort@IO" ), :Name( "2012;PinShort@VDD" ), ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
)
Et si j’avais mille colonnes ? Ensuite, je dois saisir manuellement celui-ci un par un ? ou faire ça manuellement ? Oui, bien sûr, je peux le faire manuellement. Mais ce n'est pas mon objectif, je veux avoir un script pour pouvoir lire l'expression régulière pour trouver la pile des paramètres "(\d+);(\S+)", quelle que soit ma table d'entrée.
Re : Empiler plusieurs paramètres avec condition avec JSLLes détails dépendront de ce que vous entendez exactement lorsque vous dites « ma table est dynamique » et du niveau d'intelligence dont vous avez besoin.
Mais, par exemple, en apportant quelques petites modifications au code généré par JMP, vous pourriez avoir :
NamesDefaultToHere(1);
sourceTable = DataTable("FINAL");
stackCols =
{
:Name( "2010;PinShort@CLK" ),
:Name( "2011;PinShort@IO" ),
:Name( "2012;PinShort@VDD" ),
:Name( "2013;PinShort@LA" ),
:Name( "2014;PinShort@LB" ),
:Name( "2030;PinOpen@CLK" ),
:Name( "2031;PinOpen@IO" ),
:Name( "2032;PinOpen@VDD" ),
:Name( "2033;PinOpen@LA" ),
:Name( "2034;PinOpen@LB" ),
:Name( "2200;Ana_Idd_noClock@VDD" ),
:Name( "2360;Dig_ATE_FUN_00_001_Authenticate" ),
:Name( "2361;Dig_ATE_FUN_00_003_DisableReset" ),
:Name( "2380;Dig_ATE_FUN_00_004_GetVersion" ),
:Name( "2440;SyncPulse_and_capResponse_0x90" ),
:Name( "2441;Ana_Pads_ATE_VOL_0uA@IO" ),
:Name( "2442;Ana_Pads_ATE_VOH_0uA@IO" ),
:Name( "2443;Ana_Pads_ATE_VOL_0uA_IDD@VDD" ),
:Name( "2444;Ana_Pads_ATE_VOL_0uA_Rcont_GND@VSS" )
};
resultTable = sourceTable << Stack(columns(stackCols), Source Label Column( "Label" ), Stacked Data Column( "Data" ));
resultTable << setName((sourceTable << getName)||" Stacked Data");
Les valeurs de « sourceTable » et « stackCols » seraient définies par une interface utilisateur ou un script JSL plus grand.
Re : Empiler plusieurs paramètres avec condition avec JSLSalut Ian,
Je le sais déjà. Les choses sont que ma table est dynamique. Je ne veux pas modifier mon script à chaque fois que j'ai une table de données différente. Mais mon format de données paramétriques est correct. Cela aurait donc dû être une manière intelligente de coder cela en JSL.Re : Empiler plusieurs paramètres avec condition avec JSLSi vous le pouvez, c'est une bonne idée de laisser JMP faire le travail à votre place. En général, vous n'avez besoin de faire les choses "à la main" qu'une seule fois, puis d'utiliser le code généré automatiquement par JMP.
Dans votre cas, si vous faites « Tables > Pile » :

appuyer sur « OK » donne une nouvelle table contenant un script enregistré appelé « Source ». Si vous faites un clic droit sur l'icône verte « exécuter » associée, vous pouvez sélectionner « Modifier », ce qui vous donnera ce script :
Data Table( "FINAL.jmp" ) << Stack(
columns(
:Name( "2010;PinShort@CLK" ),
:Name( "2011;PinShort@IO" ),
:Name( "2012;PinShort@VDD" ),
:Name( "2013;PinShort@LA" ),
:Name( "2014;PinShort@LB" ),
:Name( "2030;PinOpen@CLK" ),
:Name( "2031;PinOpen@IO" ),
:Name( "2032;PinOpen@VDD" ),
:Name( "2033;PinOpen@LA" ),
:Name( "2034;PinOpen@LB" ),
:Name( "2200;Ana_Idd_noClock@VDD" ),
:Name( "2360;Dig_ATE_FUN_00_001_Authenticate" ),
:Name( "2361;Dig_ATE_FUN_00_003_DisableReset" ),
:Name( "2380;Dig_ATE_FUN_00_004_GetVersion" ),
:Name( "2440;SyncPulse_and_capResponse_0x90" ),
:Name( "2441;Ana_Pads_ATE_VOL_0uA@IO" ),
:Name( "2442;Ana_Pads_ATE_VOH_0uA@IO" ),
:Name( "2443;Ana_Pads_ATE_VOL_0uA_IDD@VDD" ),
:Name( "2444;Ana_Pads_ATE_VOL_0uA_Rcont_GND@VSS" )
),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
)
Vous pouvez rendre ce script plus intelligent, mais si vous ajoutez simplement de nouvelles lignes, il fonctionnera correctement (tant que les colonnes dont il a besoin sont toujours dans la table source).