Comparer des lignes et des colonnes avec des caractères spéciauxCela peut être très simple, mais je suis nouveau sur JMP et j'ai du mal à trouver une solution à cette erreur.
Inattendu "%". Il manque peut-être un "," ou ")".
L'accès à la table de données délimitée nécessite une colonne de table de données ou une variable dans l'accès ou l'évaluation de dt1 : Acidic Variant' , dt1:Acidic Variant /*###*/
Je compare simplement une ligne dans une table avec des colonnes de l'autre table. Cela fonctionne pour les noms de lignes et de colonnes qui n'ont pas de caractères spéciaux comme % ou () mais j'aurai des noms qui auront des caractères spéciaux. Quelqu'un peut-il m'indiquer comment cela peut être géré? Toute aide très appréciée. Merci
Re : Comparer des lignes et des colonnes avec des caractères spéciauxJ'ai pensé que ma boucle n'était pas correcte car elle n'a pas pris la dernière valeur. Désolé pour la mise à jour tardive.
Re : Comparer des lignes et des colonnes avec des caractères spéciaux@txnelson J'ai réalisé qu'il ne prend que les limites de spécification de la dernière ligne de l'exemple2. Je ne sais toujours pas pourquoi, mais je mettrai à jour si je le découvre.
Merci.
Re : Comparer des lignes et des colonnes avec des caractères spéciaux@txnelson merci d'avoir répondu si rapidement.
Re : Comparer des lignes et des colonnes avec des caractères spéciauxEnsuite, je soupçonne qu'il y a une différence dans le nom de la colonne et le nom dans la table de données des limites
Re : Comparer des lignes et des colonnes avec des caractères spéciaux@txnelson , mais lorsque j'exécute le script sur la table modifiée, les limites de spécification ne sont pas entrées dans la colonne "Variantes acides".Re : Comparer des lignes et des colonnes avec des caractères spéciauxLe script lit la table des limites, ligne par ligne.Il obtient ensuite le nom de la colonne à partir de la ligne sur laquelle il se trouve actuellement et applique les limites à la colonne de la table de données par nom de colonne, et non par numéro de colonne.
Par conséquent, l'ordre des colonnes dans le tableau de données n'est pas important
Re : Comparer des lignes et des colonnes avec des caractères spéciaux@txnelson , Est-il possible d'ajouter des limites de spécification à une table de données si les lignes ne sont pas dans le même ordre que les colonnes ? Par exemple,
la table Example1 sera la même qu'elle est, mais la table Example2 sera :

Comment puis-je atteindre cet objectif? Merci pour toute contribution.
Re : Comparer des lignes et des colonnes avec des caractères spéciauxMerci beaucoup pour l'explication.
Re : Comparer des lignes et des colonnes avec des caractères spéciauxLe problème est courant lors de l'écriture de JSL ..... vous avez des caractères spéciaux dans les noms de vos colonnes.Ainsi, par exemple, le nom de votre colonne pourrait être
A+B
et ce que vous essayez de faire, c'est de définir une propriété de colonne... dans ce cas, Spec Limits.Donc, si la commande est directement écrite, cela ressemblerait à :
:A+B << Set Property( "Spec Limits", { LSL( 22 ), USL( 55 ), show limits( 1 ) } );
JSL n'aimera pas cela, car il l'interprétera comme une colonne nommée "A" à laquelle vous ajoutez la valeur d'un nom de variable "B", puis lui appliquez la propriété Set.JSL jetterait simplement une erreur.
Donc, la solution est d'utiliser la fonction :Name().
:Name("A+B") << Set Property( "Spec Limits", { LSL( 22 ), USL( 55 ), show limits( 1 ) } );
Cela forcera JSL à interpréter A+B comme un nom de colonne.Maintenant, pour rendre cela encore plus précis, si nous ajoutons un pointeur vers une table de données au début de ceci, cela garantira que non seulement il pointe vers une colonne spécifique, il pointe vers une colonne spécifique dans une table de données spécifique
dt1 = data table("..........");
dt1:Name( "A+B" ) << Set Property( "Spec Limits", { LSL( 22 ), USL( 55 ), show limits( 1 ) } );
Passons maintenant à votre question spécifique :
( "dt1:Name(\!"" || Column( dt2, "ColumnName" )[i] || "\!")" )
Il faut vraiment le regarder sous une forme plus complète
Parse( "dt1:Name(\!"" || Column( dt2, "ColumnName" )[i] || "\!")" ) )
Nous devons toujours examiner JSL, de l'intérieur.Par conséquent, disons que
i = 2;
et que la valeur de la deuxième ligne dans la table de données dt2 pour une variable nommée ColumnName est A+B.
Column( dt2, "ColumnName" )[i] = "A+B"
Alors maintenant, le code JSL est résolu à
Parse( "dt1:Name(\!"" || "A+B" || "\!")" ) )
L'opération suivante est simplement la contatation de 3 chaînes en une seule chaîne.
"dt1:Nom(\!""
"A+B"
"\!")"
Il peut sembler qu'il y ait trop de guillemets doubles dans la chaîne 1 et la chaîne 3. Mais en JSL, \! est un caractère d'échappement, indiquant que le caractère qui le suit doit être traité différemment.\!n est traité comme un caractère de saut de ligne et, dans notre exemple, \!" est traité comme un guillemet double intégré.
Ainsi, une fois la concaténation terminée, la JSL ressemble à
Parse( "dt1:Name(\!"A+B\!")" ) )
La dernière étape est l'action résultante de la fonction Parse().Il analysera la chaîne et la préparera pour l'exécution.Dans notre cas, cela signifie simplement qu'il supprimera les guillemets extérieurs et résoudra le \!" en un simple guillemet double, en le laissant avec
dt1:Name("A+B")
C'est la forme exacte de ce qui est requis comme syntaxe pour référencer une colonne qui a des caractères spéciaux dans son nom
dt1:Name( "A+B" ) << Set Property( "Spec Limits", { LSL( 22 ), USL( 55 ), show limits( 1 ) } );
J'espère que ça aide
Re : Comparer des lignes et des colonnes avec des caractères spéciaux@txnelson Cela a vraiment fonctionné comme un charme. Cependant, pouvez-vous m'aider à comprendre ce que fait cette partie? J'ai essayé d'utiliser la fonction name mais je n'ai pas réussi à la faire fonctionner. Encore une fois, merci beaucoup pour votre aide.
<SPAN class="token punctuation">(</SPAN> <SPAN class="token string">"dt1:Name(\!"</SPAN><SPAN class="token string">" || Column( dt2, "</SPAN><SPAN class="token function">ColumnName</SPAN><SPAN class="token string">" )[i] || "</SPAN>\<SPAN class="token operator">!</SPAN><SPAN class="token string">")"</SPAN> <SPAN class="token punctuation">)</SPAN>
Re : Comparer des lignes et des colonnes avec des caractères spéciauxVoici une modification de votre script qui lui permettra de fonctionner.Vous vous dirigiez sur le bon chemin, il vous suffisait d'utiliser la fonction :Name() dans la fonction Substitute
Names Default to Here(1);
dt1 = Data Table( "Example1" );
dt2 = Data Table( "Example2" );
a = N Rows( dt2 );
colNamesList = dt1 << get column names( string );
For( i = 1, i < a, i++,
Eval(
Substitute(
Expr(
If( Try( __col__ << get name, "" ) != "",
__col__ << Set Property(
"Spec Limits",
{LSL( _LSL_ ), USL( _USL_ ), Target( _Target ), Show Limits( 1 )}
)
)
),
Expr( __col__ ), Parse( "dt1:Name(\!"" || Column( dt2, "ColumnName" )[i] || "\!")" ),
Expr( _LSL_ ), dt2:LSL[i],
Expr( _USL_ ), dt2:USL[i],
Expr( _Target ), dt2:Target[i],
)
)
);
De plus, j'ai ajouté une vérification pour m'assurer que la colonne se trouve dans la table de données cible, afin que le script ne génère pas d'erreur et arrête le traitement avant que tous les enregistrements ne soient traités.
Re : Comparer des lignes et des colonnes avec des caractères spéciaux@Aam_jmp ,
Peut-être que c'est un article utile dont vous pouvez apprendre quelque chose https://community.jmp.com/t5/Discussions/Spec-limits-issue/mp/50166.
J'essaie de comprendre en lisant le fil de discussion quelle était votre question réelle? Cela vous aidera probablement si vous définissez votre objectif - de sorte que les discussions soient plus faciles à répondre et seront bénéfiques pour la communauté en général.
Re : Comparer des lignes et des colonnes avec des caractères spéciauxUday, merci pour l'aide. J'apprends moi-même cette partie. Cependant, j'essayais d'accomplir des limites de spécification à une table de données en utilisant une autre table de données. Je peux le faire en douceur si les noms des colonnes n'ont pas de caractères spéciaux. Cependant, je ne parviens pas à gérer les caractères spéciaux dans mes tables de données. Une approche que j'ai essayée était de trouver le (%) dans mes noms de colonnes et de les remplacer par un espace. Même si cela a fonctionné, je ne pense pas que ce soit la meilleure solution à mon problème. Je sais que je peux utiliser un complément pour ajouter des limites de spécification, mais il serait bon de savoir comment je peux résoudre ce problème avec jsl. Merci pour toute contribution que vous pourriez fournir à ce sujet. Mon code est :
dt1 = Data Table( "Example1" );
dt2 = Data Table( "Example2" );
a = N Rows( dt2 );
For( i = 1, i < a, i++,
Eval(
Substitute(
Expr(
__col__ << Set Property( "Spec Limits", {LSL( _LSL_ ), USL( _USL_ ), Target( _Target ), Show Limits( 1 )} );
),
Expr( __col__ ), Parse( "dt1:" || dt2:ColumnName[i] ),
Expr( _LSL_ ), dt2:LSL[i],
Expr( _USL_ ), dt2:USL[i],
Expr( _Target ), dt2:Target[i],
)
)
);
Re : Comparer des lignes et des colonnes avec des caractères spéciaux@Aam_jmp ,
Si vous regardez la documentation de Parse() que vous pouvez trouver sous Help => Scripting Index ==> Parse ,
Parse par sa définition attend une chaîne, mais vous transmettez 2 arguments dans votre implémentation et vous vous attendez à ce qu'ils soient concaténés. C'est la raison pour laquelle j'ai pu voir pourquoi cela ne fonctionne pas même si vous fournissez le nom correct de la colonne. Scripting Index est votre ami et utilisez-le de plus en plus pour vous aider avec les syntaxes et les définitions de fonctions.
Re : Comparer des lignes et des colonnes avec des caractères spéciauxPourquoi ne donne-t-il pas la sortie que je veux avec Parse même après avoir donné le nom correct de la colonne? Existe-t-il un moyen d'analyser des caractères spéciaux tels que % et () ? @uday_guntupalli
Re : Comparer des lignes et des colonnes avec des caractères spéciaux@Aam_jmp
dt1 = data table( "Example1" );
dt2 = data table( "Example2" );
ColValuesEx2 = dt2:Column 1 << Get Values;
a = n rows(dt2);
Res= {};
For(i=1,i<=a,i++,
temp = Concat("dt1:",ColValuesEx2[i]);
Insert Into(Res,temp);
);
Show(Res);
Essaye ça. Le problème que je vois avec ce que vous faisiez auparavant était que ColName ne fait pas référence à une colonne réelle. Lorsque vous essayez d'atteindre la table de données 2, vous devez vous référer à une colonne qui existe dans la table de données.
J'ai utilisé concatenate au lieu de Parse et j'obtiens le résultat souhaité.

Re : Comparer des lignes et des colonnes avec des caractères spéciaux@uday_guntupalli Même si je ne peux pas fournir le tableau, une partie de ce que je veux réaliser est de pouvoir analyser les noms de colonnes. J'ai créé des tableaux de données qui se ressemblent un peu. Je veux que le code ci-dessous fonctionne pour ces données.
Names Default To Here( 1 );
dt1 = data table( "Example1" );
dt2 = data table( "Example2" );
dt4 = dt2:Column 1 << get values();
a = n rows(dt2);
For(i=1,i<=a,i++,
Parse("dt1:" || dt4[i]);
);
Re : Comparer des lignes et des colonnes avec des caractères spéciaux@Aam_jmp ,
Veuillez relire ma réponse et essayer d'utiliser l'exemple suivant. La fonction Nom sera en mesure de gérer le problème que vous rencontrez. Je poste un échantillon du même. À moins que vous ne partagiez votre script et vos exemples de données, il est difficile de voir ce qui cause l'erreur.
dt = Open( "$SAMPLE_DATA/Big Class.jmp" ); // Open Sample Data
MeanWeight = Col Sum(dt:weight); // Calculate Column Mean
dt << New Column("% of Total Weight",Numeric,Format("Percent",10,2),Continuous,Formula(:weight/MeanWeight)); // Define New column with % in name
dt << New Column("Test",Numeric,Format("Percent",10,2),Formula(Col Cumulative Sum(:Name("% of Total Weight")))); // Define Test Column that demonstrates the use of Name function that can capture the column name with % in it J'espère que cela explique un peu mieux ma suggestion, sinon veuillez offrir un peu plus de détails afin que je puisse essayer d'aider
Re : Comparer des lignes et des colonnes avec des caractères spéciauxLes noms sont comme ceci : Titre (%) 1, Titre (%) 2 et ainsi de suiteRe : Comparer des lignes et des colonnes avec des caractères spéciaux@Aam_jmp ,
Si le symbole % fait partie du nom de votre colonne, comme disons que le nom de la colonne est "%x", essayez d'utiliser la fonction Name() pour identifier la colonne. Si vous pouviez fournir un exemple d'ensemble de données et votre script, nous pouvons l'examiner pour voir ce qui ne va pas