Cómo enviar una tabla de datos como argumento a una funciónHola a todos,
Así que he estado tratando de hacer esto por un tiempo y no puedo entenderlo.
Estoy haciendo un script para exportar múltiples imágenes desde algunas carpetas diferentes. He creado una función de "importación" y una función de "recorte".
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>Entonces funciona bien hasta que trato de enviar esta tabla como argumento para mi función de recorte.
Entiendo que dt1 no es mi tabla real, sino solo un puntero y que si lo envío directamente a la tabla, la función solo tendría un puntero a ese puntero. Entonces intenté usar:
dt1<<SET name=""></SET>
Y eso funciona bien. El problema es cuando trato de no usar un título personalizado para cada tabla. Intenté lo siguiente:
Trimtables (dt1<<GET name=""></GET>
Pero esto no funciona. Intenté muchas variaciones (mientras cambiaba lo que la función espera):
Trimtable (Char(dt1<<GET name=""></GET>
Pero nada parece funcionar . Esencialmente, lo que necesitaría sería en C, donde enviaría & datatable como argumento. Estoy seguro de que esto es bastante trivial, pero para mí no puedo entenderlo.
Algunas ideas ?
Gracias,
Beto
Re: Cómo enviar una tabla de datos como argumento en una funcióny por supuesto probé esto:
Trimtables (Data Table (dt1<<GET name=""></GET>
Supongo que la instrucción Get Name () simplemente no devuelve una cadena normal, sino algo extraño como "! \" Nombre de tabla de datos "! \"
Supongo que en última instancia podría recortar esa cadena para eliminar los caracteres especiales, pero eso parece una medida desesperada
Re: Cómo enviar una tabla de datos como argumento en una funciónIntente poner algunas declaraciones show dentro de sus funciones para ver qué está pasando. Este fragmento de código funciona bien:
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: Cómo enviar una tabla de datos como argumento en una funciónMFI devuelve una lista de las tablas que abrió, incluso si solo hay una tabla. El resultado de su función de importación es probablemente una lista con un solo elemento, { tabla de datos ("pictures.jmp") } o similar. Probablemente necesites algo como
TrimTable( dt1[ 1 ] )
para obtener la primera tabla de datos de la lista.
Re: Cómo enviar una tabla de datos como argumento en una funciónHola pmroz
Gracias por la rápida respuesta.
He estado usando la función Caption, que supongo que es bastante similar a Show, con el beneficio adicional de que se muestra sobre todo lo demás en lugar de escribir en el registro, que se vuelve bastante desordenado tan pronto como hay errores.
He hecho el siguiente código, que funciona:
Names Default To Here( 1 );
Mydt = Function({},
dt = Open( "$SAMPLE_DATA/Big Class.jmp" );
dt<<SET name=""></SET>Entonces esto me dice que es posible usar el nombre de la tabla de datos como referencia y trabajar desde allí.
El problema es que cuando trato de usar este código con una tabla creada con la función Importar múltiples archivos, ya no funciona, lo que me dice que algo más está en marcha.
Creo que al crear una tabla de importación múltiple, jmp considera el objeto no como una tabla de datos sino como algo más. Cuando uso la función get name, no devuelve una cadena citada normal sino una lista.
Parece estar funcionando ahora que uso lo siguiente en la función "mydt":
m = dt[1] <<GET name=""></GET>
Aún así, esto se siente un poco extraño. ¿Alguna idea de por qué importar múltiples archivos conduce a este comportamiento?
Re: Cómo enviar una tabla de datos como argumento en una funciónGracias Craige_Hales,
Estaba escribiendo mi respuesta cuando publicaste la tuya. Lo bueno es que llegamos a la misma conclusión:)