So senden Sie eine Datentabelle als Argument an eine FunktionHallo zusammen,
Ich versuche das nun schon seit einiger Zeit und komme einfach nicht damit klar.
Ich erstelle ein Skript zum Exportieren mehrerer Bilder aus verschiedenen Ordnern. Ich habe eine „Import“-Funktion und eine „Trimm“-Funktion erstellt.
Import = Function ({path},
dtimport= Multiple File Import (
// the import arguments
)<< Import Data;
Return (dtimport);
};
Trimtables = Function ({table, arg1, arg2, arg3},
table:Image<<SET name=""></SET>Es funktioniert also einwandfrei, bis ich versuche, diese Tabelle als Argument für meine Trimmfunktion zu senden.
Ich verstehe, dass dt1 nicht meine eigentliche Tabelle, sondern nur ein Zeiger ist und dass die Funktion nur einen Zeiger auf diesen Zeiger hätte, wenn ich das direkt an die Tabelle sende. Also habe ich versucht:
dt1<<SET name=""></SET>
und das funktioniert gut. Das Problem entsteht, wenn ich versuche, nicht für jede Tabelle einen benutzerdefinierten Titel zu verwenden. Ich habe Folgendes versucht:
Trimtables (dt1<<GET name=""></GET>
Aber das funktioniert nicht. Ich habe viele Variationen ausprobiert (und dabei geändert, was die Funktion erwartet):
Trimtable (Char(dt1<<GET name=""></GET>
Aber nichts scheint zu funktionieren. Was ich im Wesentlichen brauchen würde, wäre wie in C, wo Sie &datatable als Argument senden würden. Ich bin mir sicher, dass das ziemlich trivial ist, aber für meine Lieben komme ich nicht damit klar.
Irgendwelche Ideen ?
Danke,
Bob
Betreff: So senden Sie eine Datentabelle als Argument an eine FunktionDanke Craige_Hales,
Ich war gerade dabei, meine Antwort zu schreiben, als Sie Ihre gepostet haben. Gut, dass wir zum gleichen Schluss gekommen sind 
Betreff: So senden Sie eine Datentabelle als Argument an eine FunktionHallo pmroz,
Danke für die schnelle Antwort.
Ich habe die Caption-Funktion verwendet, die meiner Meinung nach Show ziemlich ähnlich ist, mit dem zusätzlichen Vorteil, dass sie über allem anderen angezeigt wird, anstatt in das Protokoll zu schreiben, was ziemlich chaotisch wird, sobald es Fehler gibt.
Ich habe den folgenden Code erstellt, der funktioniert:
Names Default To Here( 1 );
Mydt = Function({},
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt<<SET name=""></SET>Das zeigt mir also, dass es tatsächlich möglich ist, den Namen der Datentabelle als Referenz zu verwenden und von dort aus zu arbeiten.
Das Problem ist, wenn ich versuche, diesen Code mit einer Tabelle zu verwenden, die mit der Funktion „Mehrere Dateiimport“ erstellt wurde, dann funktioniert er nicht mehr, was mir sagt, dass etwas anderes im Gange ist.
Ich denke, wenn jmp eine Tabelle aus mehreren Importen erstellt, betrachtet jmp das Objekt nicht als Datentabelle, sondern als etwas anderes. Wenn ich die Funktion „Name abrufen“ verwende, wird keine normale Zeichenfolge in Anführungszeichen zurückgegeben, sondern eine Liste.
Es scheint jetzt zu funktionieren, da ich Folgendes in der Funktion „mydt“ verwende:
m = dt[1] <<GET name=""></GET>
Trotzdem fühlt sich das etwas seltsam an. Irgendwelche Ideen, warum das Importieren mehrerer Dateien zu diesem Verhalten führt?
Betreff: So senden Sie eine Datentabelle als Argument an eine FunktionMFI gibt eine Liste der geöffneten Tabellen zurück, auch wenn nur eine Tabelle vorhanden ist. Das Ergebnis Ihrer Importfunktion ist wahrscheinlich eine Liste mit einem einzelnen Element, { datatable("pictures.jmp") } o.ä. Sie brauchen wahrscheinlich so etwas wie
TrimTable( dt1[ 1 ] )
um die erste Datentabelle aus der Liste abzurufen.
Betreff: So senden Sie eine Datentabelle als Argument an eine FunktionVersuchen Sie, einige Show-Anweisungen in Ihre Funktionen einzufügen, um zu sehen, was vor sich geht.Dieses Code-Snippet funktioniert einwandfrei:
fn1 = function({tbl_path},
dt_fn1 = open(tbl_path);
dt_fn1;
);
fn2 = function({tbl, arg1, arg2},
show(tbl, arg1, arg2);
tbl:height << set name("New Name");
);
dt = fn1("$sample_data\Big Class.jmp");
show(dt);
fn2(dt, "Hello", "World");
Betreff: So senden Sie eine Datentabelle als Argument an eine Funktionund natürlich habe ich Folgendes versucht:
Trimtables (Data Table (dt1<<GET name=""></GET>
Ich vermute, dass die Get Name()-Anweisung einfach keine normale Zeichenfolge zurückgibt, sondern etwas Seltsames wie „!\ „Datentabellenname“ !\“
Ich denke, als letzten Ausweg könnte ich die Zeichenfolge kürzen, um die Sonderzeichen zu entfernen, aber das klingt nach einer verzweifelten Maßnahme