erreur : "L'expression ne correspond pas aux types de colonnes disponibles"<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Salut tout le monde,
Dans le code suivant, j'obtiens l'erreur : "L'expression ne correspond pas aux types de colonnes disponibles" , et cela se produit lors de l'évaluation de la formule.
J'essaie simplement de référencer la même table à laquelle j'ajoute une nouvelle colonne, par exemple en soustrayant deux colonnes dans la table appelée "dt" à laquelle j'ajoute une nouvelle colonne... Je n'arrive pas à comprendre pourquoi ça ne fonctionne pas.
dt = maTable();
cols = dt << GetColumnNames("String");
//Attendez(3);
Pour(c=1, c<=NItems(cols), c++,
Si( CommenceAvec(cols, "HTOL"),
dt << Nouvelle colonne (cols|| " Δ", Numérique, Continu, Formule ( liste d'évaluation (colonne (dt, 4)) ) );
);
);
merci
Jeff
Re : erreur : « L'expression ne correspond pas aux types de colonnes disponibles »Merci PMroz! J'ai fini par résoudre ce problème hier soir en utilisant un verbe assez similaire au vôtre - j'ai utilisé quelque chose comme ceci :
Je pense que j'ai utilisé l'analyse .. Je ne me souviens pas si j'ai dû utiliser eval ou non, je suis sûr à environ 60 % de l'avoir fait.
Si quelqu'un a besoin de moi, répondez à ceci et je rechercherai la syntaxe exacte.
dt << nouvelle colonne (analyser (cols|| " Δ"), Numérique, Continu, Formule (:^cols^ - :données 0))
Re : erreur : « L'expression ne correspond pas aux types de colonnes disponibles »Technique similaire à celle de @Stephen.pearson :
dt = Nouveau tableau ( "Démo" , Ajouter des lignes ( 3 ) ,
Nouvelle colonne ( "données 0" , Numérique , Continu , Format ( "Meilleur" , 12 ) , Définir les valeurs ( [ 1 , 2 , 3 ] ) ) ,
Nouvelle colonne ( "données 100" , Numérique , Continu , Format ( "Meilleur" , 12 ) , Définir les valeurs ( [ 4 , 5 , 6 ] ) ) ,
Nouvelle colonne ( "données 200" , Numérique , Continu , Format ( "Meilleur" , 12 ) , Définir les valeurs ( [ 7 , 8 , 9 ] ) )
) ;
cols = dt << obtenir les noms de colonnes ( "Chaîne" ) ;
pour ( c = 1 , c <= articles ( cols ) , c ++,
si ( commence avec ( majuscule ( cols [ c ]) , "DONNÉES" ) ,
nouveau_col_expr = evalinsert ( "\[dt << nouvelle colonne (cols|| " Δ", Numérique, Continu, Formule (:^cols^ - :données 0))]\") ;
évaluer ( analyser ( nouveau_col_expr )) ;
) ;
) ;
Re : erreur : « L'expression ne correspond pas aux types de colonnes disponibles »colonne(dt,c) n'est pas la même chose que :données 100 en ce qui concerne la formule.
Une façon de faire fonctionner ce code consiste à utiliser du JSL dynamique, qui évalue le JSL avant de l'exécuter.
// Je ne sais pas si c'est tout à fait la bonne syntaxe mais vous voyez l'idée
ColonneCible = colonne(dt,c) <
//remplacement dynamique pour entrer dans la clause if
Évaluer(
Analyser (
Insertion d'évaluation (
"\[
dt << Nouvelle colonne (cols|| " delta", Numérique, Continu, Formule ( :^ColonneCible^ - :données 0 ) );
]\"
) ) );
Si les noms de vos colonnes contiennent des caractères spéciaux, vous devrez peut-être utiliser :Name(" ^Colonne cible^ ") dans la formule. Cela peut toujours donner des résultats étranges s'il y a des symboles ^/-+* dans le nom de la colonne, car la formule n'est pas évaluée de manière fiable.
Re : erreur : « L'expression ne correspond pas aux types de colonnes disponibles »Merci pour la réponse rapide!!
J'ai une table "dt" qui contient des colonnes de données.Il peut s'agir de "données 0", "données 100" ou "données 200", jusqu'à un nombre inconnu.
Quel que soit le nom de la colonne, je souhaite en soustraire la colonne "données 0" - même si la colonne est "données 0" (cette colonne est donc composée uniquement de zéros, mais les autres comme "données 100" ne sont pas toutes des zéros " .
J'essayais donc d'avoir une boucle for qui vérifierait chaque colonne, et si elle s'appelle "data 100" par exemple, je voulais qu'elle crée automatiquement une colonne "data 100 delta", avec la formule dedans : (data 100 - donnée 0).
Je pensais pouvoir faire cela comme suit :
dt = maTable();
cols = dt << GetColumnNames("String");
//Attendez(3);
Pour(c=1, c<=NItems(cols), c++,
Si( CommenceAvec(cols, "données"),
dt << Nouvelle colonne (cols|| " delta", Numérique, Continu, Formule ( colonne(dt,c) - :données 0 ) );
);
);
la référence ":data 0" semble fonctionner - elle mettra les données ":data 0" copiées dans la colonne "data 100 delta", mais si je mets la "column(dt,c)", en essayant d'obtenir le colonne de données 100, il y a une erreur.....
merci!!
Re : erreur : « L'expression ne correspond pas aux types de colonnes disponibles »Jeff,
Vous avez raison, le problème est "eval list( column(dt,4))". Eval List() s'attend à ce qu'il y ait une liste à évaluer. par exemple : {1,2,3}.
Est-ce ce que vous vouliez ? Le contenu des listes Column(dt, 4) est-il ? Étant donné que vous avez probablement des valeurs numériques dans cette colonne, une erreur est générée.
Même dans ce cas, les colonnes des tables de données JMP n'acceptent que 3 types de données : Numérique, Caractère et Rowstate. Si vous aviez effectivement des listes dans chaque cellule de Column(4), ce seraient en fait des chaînes. c'est-à-dire "{1,2,3}". Dans ce cas, il faudrait d'abord analyser la chaîne pour la convertir en expression, et ALORS EvalList() fonctionnerait.
La question est : que vouliez-vous faire avec cette formule ?