Variablen zur Laufzeit erstellenHallo,
Gibt es eine Möglichkeit, Variablen zur Laufzeit zu erstellen (vor dem Ausführen der App weiß ich nicht, wie viele Variablen ich benötige und deren Typen)?
Die Lösung, an der ich arbeite:
1. Der Benutzer wählt eine jmp / excel-Datentabelle aus
2. Der Benutzer wählt Spalten aus, die zum Filtern der Tabelle verwendet werden sollen (unbekannte Anzahl und Namen).
3. Die App erstellt für jede ausgewählte Spalte ein Listenfeld oder ein Optionsfeld und füllt diese mit unterschiedlichen Werten dieser Spalte
4. Nachdem der Benutzer die zu filternden Werte ausgewählt hat, führt die App eine Filterung aus und gibt eine gefilterte Tabelle zurück
Daher muss ich zur Laufzeit für jedes Listenfeld Variablen erstellen, die den Namen haben, sofern dies möglich ist.
Vielen Dank,
Tom
Betreff: Variablen zur Laufzeit erstellenMit JSL können Sie auf jeden Fall Ihre eigene Version des Datenfilters erstellen. Sie können sie in der Form präsentieren, die Sie für Ihre Umgebung als am besten geeignet erachten. Ich werde Ihnen sagen, dass die gesamte Ausnahmebearbeitung, die Sie einbauen müssen, die Aufgabe recht komplex macht. Nachfolgend finden Sie ein sehr grobes Skript, das ein Beispiel für das Erstellen von Variablen in einer Umgebung enthält, in der der Benutzer die Tabelle und die Spalten in der zu verarbeitenden Tabelle auswählen kann. Ich entschied mich für die Beispieldatentabelle "Big Class", aber jede Tabelle würde mit dem Code funktionieren. Die mit "nameList", "handleList" und CNTList erstellten Listen speichern die ausgewählten Spalten und den Zeiger auf die generierten Listenfelder. Die letzte Spalte ist die Zahl, die die Rückgabe aller Informationen ermöglicht, wenn eine Auswahl ausgewählt wird in einem der generierten Listenfelder. Nun werde ich klar erkennen, dass dies nur eine der möglichen Richtungen ist, die Sie zum Erstellen der gewünschten Anzeige verwenden können. Ich möchte auch wiederholen, dass viele Ausnahmecodes, die sich mit Dingen befassen, wie das Entfernen einer ausgewählten Spalte, nach der gefiltert werden soll, wie mit numerischen Filtern umzugehen ist, in ihren Vergleichen "Und" oder "Oder" sind. ... alle Punkte, die behandelt werden müssen.
Names Default To Here( 1 );
dt = Open( "$SAMPLE_DATA\Big Class.jmp" );
Current Data Table( dt );
CNT = 0;
// Create lists to handle processing
nameList = {};
handleList = {};
CNTList = {};
// Create the new window
nw = New Window( "Example",
V List Box(
Text Box( "Data Table Columns" ),
Spacer Box( size( 0, 10 ) ),
clb = Col List Box(
dt << get name,
all,
max selected( 1 ),
Sel = clb << get selected;
If( N Items( Sel ) > 0,
CNT++;
Insert Into( nameList, Sel[1] );
Eval( Parse( "summarize(dt,bygp=by(:" || Char( Sel[1] ) || "))" ) );
lb = List Box( bygp, Eval( Parse( "SelectionChoice=" || Char( CNT ) || ";" ) ) );
Insert Into( handleList, lb );
Insert Into( CNTList, CNT );
HLB << append( lb );
);
),
HLB = H List Box()
)
);Betreff: Variablen zur Laufzeit erstellenDanke, Jim.
Ich möchte meine eigene grafische Benutzeroberfläche mit Listboxen und Radioboxen entwickeln - ohne die Option Datenfilter zu verwenden.
Der Benutzer kann steuern, welche Spalten für die Filterung verwendet werden sollen. Ich lasse ihn die Spaltennamen in "User Properties" jsl verwalten.
Zum Beispiel erwünschteColumnsList = {"ColumnA", "ColumnD"} - wird vom Benutzer geändert.
Dann werde ich für jede ausgewählte Spalte ein Listenfeld zum Filtern erstellen.
Einige Vorschläge für diesen Weg?
Nochmals vielen Dank.
Tom
Betreff: Variablen zur Laufzeit erstellenSie können den eingebauten "Datenfilter" verwenden, um zu tun, was Sie möchten, ohne Code schreiben zu müssen. Öffnen Sie einfach die gewünschte Datentabelle und gehen Sie zum Pulldown-Menü
Zeilen ==> Datenfilter
Dann können eine oder alle Spalten zum Filtern ausgewählt werden.
Wenn die Filter ausgewählt und ihre Werte ausgewählt wurden, kann die neue untergeordnete Datentabelle erstellt werden, indem Sie zum roten Dreieck gehen und "Teilmenge anzeigen" auswählen.
Diese Aktion kann auch mit dem folgenden Code skriptiert werden:
Names Default To Here( 1 );
// Open the desired file
path=pick file();
dt=open(path);
// Get all of the columns in the data table
colList = dt << get column names();
// Build the code required to open a Data Filter
// That has all columns available for filtering
TheExpr =
"dt << Data Filter(
Location( {59, 59} ),
Auto clear( 0 ),
Mode( Show( 1 ), Include( 1 ) ),
Add Filter( columns(";
TheExpr = TheExpr || ":" || colList[1];
For( i = 2, i <= N Items( colList ), i++,
TheExpr = TheExpr || ", :" || colList[i]
);
TheExpr = TheExpr || ") ) );";
// Execute the code that was built
Eval( Parse( TheExpr ) );