Stapeln Sie mehrere Parameter mit einer Bedingung mit JSLIch habe einen Datensatz mit mehreren Parametern im bestimmten Format „TestNumber;TestName“ erhalten. Ich weiß, dass wir es leicht manuell machen können. Aber
Ich möchte sie alle auf intelligente Weise mit JSL stapeln. Wie macht man das in JSL? Bitte beraten. Danke
Betreff: Mehrere Parameter mit Bedingung mit JSL stapelnHallo promz,
Danke für tolle Tipps! Es funktioniert wie ein Meister!Betreff: Mehrere Parameter mit Bedingung mit JSL stapelnSie mussten die Spaltennamen in eine Zeichenfolge konvertieren.Auch one_col ist keine Liste.Hier ist der korrigierte Code.Ich ermutige Sie dazu
a) Lesen Sie die Skripthandbücher
b) Überprüfen Sie das Protokoll regelmäßig auf Variablenwerte, Fehlermeldungen usw.
c) Nutzen Sie dieses Diskussionsforum weiterhin
Names Default To Here( 1 );
sourceTable = Data Table( "FINAL" );
col_list = sourceTable << get column names( continuous, string );
stackcols = {};
//one_col = {};
For( i = 1, i <= N Items( col_list ), i++,
one_col = col_list[i];
show(one_col, i);
If( Regex( one_col, "(\d+);(\S+)" ) == one_col,
Insert Into( stackcols, one_col )
);
);
resultTable = sourceTable << Stack(
columns( stackcols ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
);
resultTable << setName( (sourceTable << getName) || " Stacked Data" );Betreff: Mehrere Parameter mit Bedingung mit JSL stapelnDanke, pmroz. Ich habe das Skript gemäß Ihrem Vorschlag geändert, aber es sieht so aus, als wäre ein Fehler aufgetreten.
Names Default To Here( 1 );
sourceTable = Data Table( "FINAL" );
col_list = sourceTable << get column names( continuous );
stackcols = {};
one_col = {};
For( i = 1, i <= N Items( col_list ), i++,
one_col = col_list[i];
If( Regex( one_col, "(\d+);(\S+)" ) == one_col,
Insert Into( stackcols, one_col )
);
);
resultTable = sourceTable << Stack(
columns( stackcols ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
);
resultTable << setName( (sourceTable << getName) || " Stacked Data" );
/***********************************
Unbekannter Fehler beim Mustervergleich beim Zugriff oder bei der Auswertung von „Regex“, Regex/*###*/(one_col, „(\d+);(\S+)“)
Betreff: Mehrere Parameter mit Bedingung mit JSL stapelncol_list = {"2010;PinShort@CLK", "2011;PinShort@IO", "2012;PinShort@VDD", "Label", "Data"};
stackcols = {};
for (i = 1, i <= nitems(col_list), i++,
one_col = col_list[i];
if (regex(one_col, "(\d+);(\S+)") == one_col,
insertinto(stackcols, one_col);
);
);
Betreff: Mehrere Parameter mit Bedingung mit JSL stapelnHallo Nelson,
Ich verstehe es vollkommen. Und doch ist mein Problem genau das, was Sie oben erwähnt haben: „Wie fülle ich die StackCols-Liste“ mit meiner parametrischen Bedingung und dem regulären Ausdruck „(\d+);(\S+)“.
Danke trotzdem. Ich werde versuchen, es selbst auszuprobieren.Betreff: Mehrere Parameter mit Bedingung mit JSL stapeln@OneNorthJMP ,
Ich glaube, dass das, was Ian Ihnen gezeigt hat, das ist, wonach Sie verlangen.Was Ian gezeigt hat, ist, dass Sie Folgendes tun müssen: Erstellen Sie eine Liste (stackCols) in Ihrer JSL, die die Namen der Spalten enthält, die gestapelt werden sollen, und führen Sie dann den Codeabschnitt am Ende seines Skripts aus:
resultTable = sourceTable << Stack(columns(stackCols), Source Label Column( "Label" ), Stacked Data Column( "Data" ));
resultTable << setName((sourceTable << getName)||" Stacked Data");
Das Problem besteht also darin, dass Sie die StackCols-Liste füllen.Wie Sie das tun, hängt von Ihren Bedürfnissen ab.Es kann so einfach wie die Verwendung sein
stackCols = dt << get column names( continuous );
um die Liste zu füllen.Oder es erfordert möglicherweise eine komplexere Methodik.Aber was Ian gezeigt hat, ist, wie einfach es ist, die Stack-Plattform mit allen Daten auszuführen, die Sie derzeit in Ihrer Datentabelle haben.
Betreff: Mehrere Parameter mit Bedingung mit JSL stapelnHallo Ian,
Danke für die Antwort. Vielleicht ist meine Erklärung nicht klar. Ich möchte, dass das JSL-Skript verschiedene Parameter aus verschiedenen Eingabetabellen anpassen kann.
Zum Beispiel Eingabetabelle 1, ich habe 2 Spalten. Ich muss die JSL wie folgt ändern.
Data Table( "FINAL.jmp" ) << Stack(
columns(
:Name( "2010;PinShort@CLK" ),
:Name( "2011;PinShort@IO" ),
:Name( "2012;PinShort@VDD" ),
:Name( "2013;PinShort@LA" ),
:Name( "2014;PinShort@LB" ),
:Name( "2030;PinOpen@CLK" )
),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
)
Geben Sie beispielsweise Tabelle 2 ein, wenn ich 3 Spalten habe. Ich muss die JSL wie folgt ändern.
Data Table( "FINAL.jmp" ) << Stack(
columns( :Name( "2010;PinShort@CLK" ), :Name( "2011;PinShort@IO" ), :Name( "2012;PinShort@VDD" ), ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
)
Was ist dann, wenn ich tausend Spalten habe? Dann muss ich das einzeln manuell eingeben? oder das manuell machen? Ja, natürlich kann ich es manuell machen. Aber das ist nicht mein Ziel, ich möchte ein Skript haben, das den regulären Ausdruck lesen kann, um die Parameter „(\d+);(\S+)“ zu stapeln, egal was meine Eingabetabelle ist.
Betreff: Mehrere Parameter mit Bedingung mit JSL stapelnDie Einzelheiten hängen davon ab, was genau Sie meinen, wenn Sie sagen: „Mein Tisch ist dynamisch“, und wie viel Intelligenz Sie benötigen.
Aber Sie könnten beispielsweise einige kleine Änderungen am von JMP generierten Code vornehmen;
NamesDefaultToHere(1);
sourceTable = DataTable("FINAL");
stackCols =
{
:Name( "2010;PinShort@CLK" ),
:Name( "2011;PinShort@IO" ),
:Name( "2012;PinShort@VDD" ),
:Name( "2013;PinShort@LA" ),
:Name( "2014;PinShort@LB" ),
:Name( "2030;PinOpen@CLK" ),
:Name( "2031;PinOpen@IO" ),
:Name( "2032;PinOpen@VDD" ),
:Name( "2033;PinOpen@LA" ),
:Name( "2034;PinOpen@LB" ),
:Name( "2200;Ana_Idd_noClock@VDD" ),
:Name( "2360;Dig_ATE_FUN_00_001_Authenticate" ),
:Name( "2361;Dig_ATE_FUN_00_003_DisableReset" ),
:Name( "2380;Dig_ATE_FUN_00_004_GetVersion" ),
:Name( "2440;SyncPulse_and_capResponse_0x90" ),
:Name( "2441;Ana_Pads_ATE_VOL_0uA@IO" ),
:Name( "2442;Ana_Pads_ATE_VOH_0uA@IO" ),
:Name( "2443;Ana_Pads_ATE_VOL_0uA_IDD@VDD" ),
:Name( "2444;Ana_Pads_ATE_VOL_0uA_Rcont_GND@VSS" )
};
resultTable = sourceTable << Stack(columns(stackCols), Source Label Column( "Label" ), Stacked Data Column( "Data" ));
resultTable << setName((sourceTable << getName)||" Stacked Data");
Die Werte von „sourceTable“ und „stackCols“ würden von einer Benutzeroberfläche oder einem größeren JSL-Skript festgelegt.
Betreff: Mehrere Parameter mit Bedingung mit JSL stapelnHallo Ian,
Das weiß ich schon. Die Sache ist, dass mein Tisch dynamisch ist. Ich möchte mein Skript nicht jedes Mal ändern, wenn ich eine andere Datentabelle habe. Aber mein parametrisches Datenformat ist fest. Es sollte also eine intelligente Möglichkeit sein, dies in JSL zu codieren.Betreff: Mehrere Parameter mit Bedingung mit JSL stapelnWenn Sie können, ist es eine gute Idee, JMP die Arbeit für Sie erledigen zu lassen. Im Allgemeinen müssen Sie die Dinge nur einmal „von Hand“ erledigen und dann den Code verwenden, den JMP automatisch generiert.
In Ihrem Fall, wenn Sie „Tabellen > Stapel“ ausführen:

Wenn Sie auf „OK“ klicken, wird eine neue Tabelle mit einem gespeicherten Skript namens „Quelle“ angezeigt. Wenn Sie mit der rechten Maustaste auf das zugehörige grüne „Ausführen“-Symbol klicken, können Sie „Bearbeiten“ auswählen, wodurch Sie dieses Skript erhalten:
Data Table( "FINAL.jmp" ) << Stack(
columns(
:Name( "2010;PinShort@CLK" ),
:Name( "2011;PinShort@IO" ),
:Name( "2012;PinShort@VDD" ),
:Name( "2013;PinShort@LA" ),
:Name( "2014;PinShort@LB" ),
:Name( "2030;PinOpen@CLK" ),
:Name( "2031;PinOpen@IO" ),
:Name( "2032;PinOpen@VDD" ),
:Name( "2033;PinOpen@LA" ),
:Name( "2034;PinOpen@LB" ),
:Name( "2200;Ana_Idd_noClock@VDD" ),
:Name( "2360;Dig_ATE_FUN_00_001_Authenticate" ),
:Name( "2361;Dig_ATE_FUN_00_003_DisableReset" ),
:Name( "2380;Dig_ATE_FUN_00_004_GetVersion" ),
:Name( "2440;SyncPulse_and_capResponse_0x90" ),
:Name( "2441;Ana_Pads_ATE_VOL_0uA@IO" ),
:Name( "2442;Ana_Pads_ATE_VOH_0uA@IO" ),
:Name( "2443;Ana_Pads_ATE_VOL_0uA_IDD@VDD" ),
:Name( "2444;Ana_Pads_ATE_VOL_0uA_Rcont_GND@VSS" )
),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
)
Sie können dieses Skript intelligenter gestalten, aber wenn Sie nur neue Zeilen hinzufügen, funktioniert es einwandfrei (solange sich die benötigten Spalten noch in der Quelltabelle befinden).