Hallo allerseits,
Ich bin relativ neu in JMP und insbesondere in der Skripterstellung in JSL. Ich suche nach einer Möglichkeit, ein vorhandenes Skript auf alle derzeit geöffneten Datentabellen anzuwenden (importiert über den Import mehrerer Dateien). Obwohl ich die Fülle an Community-Threads zu diesem Thema durchforstet habe, konnte ich keine funktionierende Lösung finden.
Okay, ich habe also den folgenden funktionierenden JSL-Code (Hinweis: eingebettet in einen Workflow, falls relevant):
// 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" )
)
);Die aktuelle Funktion des Workflows ist das Ersetzen eines Spaltennamens in der aktuell geöffneten Datentabelle. Allerdings kann dieser Name zwischen den Dateien variieren, weshalb ich mich entschieden habe, nur nach einem festen Suffix zu suchen.
Ich möchte dieses Skript nun erweitern, um es auf mehrere Datentabellen anzuwenden, die ich derzeit geöffnet habe. Ich habe Lösungen für ähnliche Aufgaben gesehen, die auf For- oder For Each-Schleifen und auch mit Tabellenskripten basieren, aber wie gesagt, ich bin ziemlich neu in JSL und hatte bisher keinen Erfolg.
Darüber hinaus muss dies recht allgemein gehalten sein, da die Dateinamen und Spaltennamen sehr stark variieren können.
Das ultimative Ziel besteht dann darin, diese Tabellen zu verketten, was jedoch möglicherweise den Rahmen für eine einzelne Frage sprengt.
Vielen Dank für jeden Rat oder jede Idee
You can get list of table with Get Data Table List() and then loop over that
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")
)
);
);
You could also convert the inside of your loop into a function or 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);
);