Comment envoyer une table de données comme argument dans une fonctionBonjour à tous,
J'essaie donc de faire ça depuis un moment maintenant et je n'arrive pas à comprendre.
Je crée un script pour exporter plusieurs images à partir de quelques dossiers différents. J'ai créé une fonction "importer" et une fonction "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>Cela fonctionne donc bien jusqu'à ce que j'essaie d'envoyer ce tableau comme argument pour ma fonction trim.
Je comprends que dt1 n'est pas ma table réelle mais juste un pointeur et que si je l'envoie directement à la table, la fonction n'aurait qu'un pointeur vers ce pointeur. J'ai donc essayé d'utiliser :
dt1<<SET name=""></SET>
et ça marche bien. Le problème est lorsque j'essaie de ne pas utiliser de titre personnalisé pour chaque table. J'ai essayé ce qui suit :
Trimtables (dt1<<GET name=""></GET>
Mais cela ne fonctionne pas. J'ai essayé beaucoup de variantes (tout en changeant ce qu'attend la fonction) :
Trimtable (Char(dt1<<GET name=""></GET>
Mais rien ne semble fonctionner. Essentiellement, ce dont j'aurais besoin serait comme en C où vous enverriez &datatable comme argument. Je suis sûr que c'est assez trivial, mais pour ma part, je n'arrive pas à comprendre.
Des idées ?
Merci,
Bob
Re : Comment envoyer une table de données en argument dans une fonctionMerci Craige_Hales,
J'étais en train d'écrire ma réponse lorsque vous avez posté la vôtre. Heureusement que nous sommes arrivés à la même conclusion 
Re : Comment envoyer une table de données en argument dans une fonctionSalut pmroz,
Merci pour la réponse rapide.
J'utilise la fonction Caption, qui, je suppose, est assez similaire à Show, avec l'avantage supplémentaire qu'elle s'affiche par-dessus tout le reste au lieu d'écrire dans le journal, ce qui devient assez compliqué dès qu'il y a des erreurs.
J'ai fait le code suivant, qui fonctionne :
Names Default To Here( 1 );
Mydt = Function({},
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt<<SET name=""></SET>Cela me dit donc qu'il est effectivement possible d'utiliser le nom de la table de données comme référence et de travailler à partir de là.
Le problème est que lorsque j'essaie d'utiliser ce code avec une table créée avec la fonction d'importation de fichiers multiples, cela ne fonctionne plus, ce qui me dit que quelque chose d'autre se prépare.
Je pense que lors de la création d'une table à partir d'importations multiples, jmp considère l'objet non pas comme une table de données mais comme autre chose. Lorsque j'utilise la fonction get name, elle renvoie non pas une chaîne entre guillemets normale mais une liste.
Cela semble fonctionner maintenant que j'utilise ce qui suit dans la fonction "mydt" :
m = dt[1] <<GET name=""></GET>
Cela semble quand même un peu bizarre. Avez-vous une idée de la raison pour laquelle l'importation de plusieurs fichiers conduit à ce comportement ?
Re : Comment envoyer une table de données en argument dans une fonctionMFI renvoie une liste des tables qu'il a ouvertes, même s'il n'y en a qu'une. Le résultat de votre fonction d'importation est probablement une liste avec un seul élément, { datatable("images.jmp") } ou similaire. Vous avez probablement besoin de quelque chose comme
TrimTable( dt1[ 1 ] )
pour obtenir le premier tableau de données de la liste.
Re : Comment envoyer une table de données en argument dans une fonctionEssayez de mettre des instructions show dans vos fonctions pour voir ce qui se passe.Cet extrait de code fonctionne correctement :
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");
Re : Comment envoyer une table de données en argument dans une fonctionet bien sûr j'ai essayé ceci :
Trimtables (Data Table (dt1<<GET name=""></GET>
Je suppose que l'instruction Get Name() ne renvoie tout simplement pas une chaîne normale mais une chose étrange comme "!\ "nom de la table de données" !\"
Je suppose qu'en dernier recours, je pourrais couper cette chaîne pour supprimer les caractères spéciaux, mais cela ressemble à une mesure désespérée.