Come inviare una tabella dati come argomento in una funzioneCiao a tutti,
Quindi è da un po' che provo a farlo e non riesco a capirlo.
Sto creando uno script per esportare più immagini da alcune cartelle diverse. Ho creato una funzione "import" e una funzione "trim".
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>Quindi funziona bene finché non provo a inviare questa tabella come argomento per la mia funzione trim.
Capisco che dt1 non è la mia tabella attuale ma solo un puntatore e che se lo invio direttamente alla tabella la funzione avrebbe solo un puntatore a quel puntatore. Quindi ho provato a utilizzare:
dt1<<SET name=""></SET>
e funziona bene. Il problema è quando provo a non utilizzare un titolo personalizzato per ciascuna tabella. Ho provato quanto segue:
Trimtables (dt1<<GET name=""></GET>
Ma questo non funziona. Ho provato molte varianti (cambiando ciò che la funzione si aspetta):
Trimtable (Char(dt1<<GET name=""></GET>
Ma niente sembra funzionare . Essenzialmente ciò di cui avrei bisogno sarebbe come in C dove invieresti &datatable come argomento. Sono sicuro che sia piuttosto banale, ma per quanto mi riguarda non riesco a capirlo.
Qualche idea ?
Grazie,
Bob
Ri: Come inviare una tabella di dati come argomento in una funzioneGrazie Craige_Hales,
Stavo scrivendo la mia risposta quando hai pubblicato la tua. Meno male che siamo arrivati alla stessa conclusione 
Ri: Come inviare una tabella di dati come argomento in una funzioneCiao PMroz,
Grazie per la risposta rapida.
Sto utilizzando la funzione Caption, che immagino sia abbastanza simile a Show, con l'ulteriore vantaggio di essere visualizzata sopra tutto il resto invece di scrivere nel registro, il che diventa piuttosto confuso non appena si verificano errori.
Ho creato il seguente codice, che funziona:
Names Default To Here( 1 );
Mydt = Function({},
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt<<SET name=""></SET>Quindi questo mi dice che è effettivamente possibile utilizzare il nome della tabella dati come riferimento e lavorare da lì.
Il problema è che quando provo a utilizzare questo codice con una tabella creata con la funzione Importazione di file multipli, non funziona più, il che mi dice che sta succedendo qualcos'altro.
Penso che quando si crea una tabella da più importazioni, jmp considera l'oggetto non come una tabella dati ma come qualcos'altro. Quando utilizzo la funzione get name, non restituisce una normale stringa tra virgolette ma un elenco.
Sembra funzionare ora che utilizzo quanto segue nella funzione "mydt":
m = dt[1] <<GET name=""></GET>
Eppure mi sembra un po' strano. Qualche idea sul perché l'importazione di più file porta a questo comportamento?
Ri: Come inviare una tabella di dati come argomento in una funzioneMFI restituisce un elenco delle tabelle aperte, anche se esiste una sola tabella. Il risultato della tua funzione di importazione è probabilmente un elenco con un singolo elemento, { datatable("immagini.jmp") } o simili. Probabilmente hai bisogno di qualcosa del genere
TrimTable( dt1[ 1 ] )
per ottenere la prima tabella dati dall'elenco.
Ri: Come inviare una tabella di dati come argomento in una funzioneProva a inserire alcune istruzioni show nelle tue funzioni per vedere cosa sta succedendo.Questo frammento di codice funziona bene:
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");
Ri: Come inviare una tabella di dati come argomento in una funzionee ovviamente ho provato questo:
Trimtables (Data Table (dt1<<GET name=""></GET>
Immagino che l'istruzione Ottieni nome() semplicemente non restituisca una stringa normale ma una cosa strana come "!\ "nome tabella dati"!\"
Immagino che come ultima risorsa potrei tagliare quella stringa per rimuovere i caratteri speciali, ma sembra una misura disperata