Salut tout le monde,
Je suis relativement nouveau dans JMP et surtout dans les scripts en JSL. Je cherche un moyen d'appliquer un script existant à toutes les tables de données actuellement ouvertes (importées via l'importation de plusieurs fichiers). Même si j'ai fait des recherches sur l'abondance de discussions communautaires sur ce sujet, je n'ai pas réussi à trouver une solution efficace.
D'accord, j'ai donc le code JSL fonctionnel suivant (remarque : intégré dans un workflow, le cas échéant) :
// Specify the dataset and the suffix to search for in column headers
dt = Current Data Table();
// Define suffix of interest for replacement
targetSuffix = "TimeAbs";
// Get list of column names from the current data table
colNames = dt << Get Column Names( "string" );
// Loop through all column names and check if the target suffix is present
For( i = 1, i <= N Items( colNames ), i++,
If( Contains( colNames[i], targetSuffix ),
// If the target suffix is found, change the column header to "Date"
Column( dt, colNames[i] ) << Set Name( "Date" )
)
);La fonction actuelle du workflow est le remplacement d'un nom de colonne dans la table de données actuellement ouverte, cependant ce nom peut varier d'un fichier à l'autre, c'est pourquoi j'ai décidé de rechercher uniquement un suffixe fixe.
Je voudrais maintenant étendre ce script pour l'appliquer à plusieurs tables de données que j'ai actuellement ouvertes. J'ai vu des solutions sur des tâches similaires basées sur des boucles For ou For Each et également avec des scripts de table, mais comme je l'ai dit, je suis assez nouveau dans JSL et je n'ai pas encore réussi.
De plus, cela doit être assez générique, car les noms de fichiers et de colonnes peuvent varier considérablement.
Le but ultime est alors de concaténer ces tableaux, mais pourrait être hors de portée pour une seule question.
Merci beaucoup pour vos conseils ou idées
Vous pouvez obtenir la liste des tables avec Get Data Table List(), puis parcourir celle-ci en boucle.
Names Default To Here(1);
targetSuffix = "TimeAbs";
For Each({dt_cur}, Get Data Table List(),
colNames = dt_cur << Get Column Names("String");
For Each({colname}, colnames,
If(Contains(colname, targetSuffix),
Column(dt_cur, colname) << Set Name("Date")
)
);
);
Vous pouvez également convertir l'intérieur de votre boucle en fonction ou expression
Names Default To Here(1);
change_table_name = function({dt, targetsuffix = "TimeAbs", newname = "Date"}, {Default Local},
colnames = dt << Get Column Names("String");
For Each({colname}, colnames,
If(Contains(colname, targetsuffix),
Column(dt, colname) << Set Name(newname)
)
);
);
For Each({dt_cur}, Get Data Table List(),
change_table_name(dt_cur);
);