Introuvable dans l'index du script, veuillez terminer par JSL. Merci beaucoup!

Iwx228 affiche un élément de liste de souhaits intéressant, bien que l'exemple fourni ne soit pas le cas d'utilisation typique de JSL, où il y a des lignes sélectionnées par l'utilisateur.
Excel VBA dispose d'une méthode de feuille de calcul (fonction) pour effectuer un remplacement global.Les fonctions Substitute() et Substitute Into() de JMP répondraient aux besoins des utilisateurs sans la surcharge des expressions régulières, puisqu'il n'y avait aucune exigence de modèle, juste un remplacement global. Il ne reste plus qu'à l'obtenir et à l'appliquer aux sélections en cours. La syntaxe logique serait
dt << Remplacer (searchStr, replaceStr, arguments pour les sélections, soit sélectionner les lignes et les colonnes sélectionnées, soit toutes, ou.....)
Vous trouverez ci-dessous un prototype de script appelé ReplaceCell() avec des exemples d'utilisation.
Quelques éléments à noter :
- S'applique aux données actuelles. Abandonne s’il n’y a pas de table de données actuelle.
- Abandonne si aucune colonne n’est sélectionnée. Si aucune ligne n'est sélectionnée, toutes les lignes des colonnes sélectionnées sont utilisées.
- Telle qu'elle est écrite, cette fonction s'applique uniquement aux colonnes Caractère ; il peut être étendu aux colonnes numériques, en utilisant les fonctions char() et num().
- Remplace par ligne, donc la boucle se produit une fois.
- Cela aurait pu être fait par colonne assez rapidement avec LFunc() que j'ai posté précédemment, mais je voulais garder cela simple.
- Utilisez Include() pour JSL. Pas besoin d'en faire un complément puisque CTRL + F le fait déjà
ReplaceCell = Function({src,rpl},{cdt, scol, srow, i, j, val},
if(ntable()>0, cdt=current data table(), throw("no table available"));
scol = cdt << get selected columns;
if(nitems(scol) ==0, throw("no columns are selected...aborting"));
srow = cdt << get selected rows();
if (nrow(srow)==0, srow = Transpose(1::nrow(cdt)) ); //if no rows are selected, assume the entire column.
for(i=1, i<=nrow(srow), i++,
for(j=1, j<=nitems(scol), j++,
val = scol[j][srow[i]];
if( IsString(val), scol[j][srow[i]] = Substitute(val, src, rpl) )
);
)//end for i
); //end function
//test cases create a new table with 2 selected columns
ndt = New Table( "Test 1",
Add Rows( 10 ),
New Column( "A",
Character,
"Nominal",
Set Values(
{"A7", "B7", "C7", "D7", "E7", "F7", "G7", "A9", "A79", "A707"}
)
),
New Column( "B",
Character,
"Nominal",
Set Values(
{"M7", "M77", "M07", "MX7", "E7", "E2", "E3", "F9", "G27", "M99"}
)
)
);
//replace all 7's with 1's
ReplaceCell("7","1"); //aborts no selected columns
ndt:A << set selected(1);
ndt:B << set selected(1);
//replace all 7's with 1's
ReplaceCell("7","1");
ndt << bring window to front;
//now try it with selected rows
ndt << select rows([1,2,4,7,9,10]);
ReplaceCell("1","6");
ndt << bring window to front;Ce n'est pas toutes les façons dont il peut être codé en JSL pour accomplir ce que vous voulez, mais la suggestion d'Ian est ce que j'aurais également suggéré comme solution.
C'est le résultat de la substitution. Dans le cas de "Faire correspondre la valeur de la cellule entière", la case multiple n'est pas cochée. Merci !

Si je comprends bien, pensez à utiliser l'expression JSL 'Match()'. J'ai généré le code ci-dessous en utilisant 'Cols > Recode' :

et inspecter le JSL pour la colonne de formule résultante. Et « oui », JSL est très différent de VBA. Vous devriez consulter « Aide > Livres > Guide de script » et/ou envisager une formation.
NamesDefaultToHere(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
Wait(3);
dt << New Column( "Age 2",
Character,
"Ordinal",
Formula(
Match( :age,
12, "Twelve",
13, "Thirteen",
14, "Fourteen",
15, "Fifteen",
16, "Sixteen",
17, "Seventeen",
Format( :age, "Fixed Dec", 5, 0 )
)
)
);Si c’est le nouveau cas, ce JSL n’est pas très efficace. Le code peut-il être amélioré pour la nouvelle instance ? Merci!

C'est une façon de le faire
dt = Current Data Table();
dt:class[dt << get rows where( dt:class == "A1" )] = "A9";
J'ai essayé d'écrire du JSL d'une manière qui ne fonctionne qu'avec des substitutions parfaitement adaptées, mais si vous ne souhaitez pas remplacer seulement quelques caractères, comment écrivez-vous du JSL ? Merci!

Vous pourriez utiliser abonnement à une table de données :
NamesDefaultToHere(1);
dt = Open("$SAMPLE_DATA/Big Class.jmp");
Wait(3);
maleRows = Loc(dt[0, "sex"], "M");
dt[maleRows, "sex"] = "boy";