<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Acabo de recibir una solicitud sobre una forma de mover datos de un programa externo a JMP.Generalmente recomiendo usar archivos CSV para esto, pero si la compresión es un problema, tal vez se necesite algo más.Aquí hay un par de scripts de prueba de concepto ( tendrás que asegurarte de que hagan lo que necesitas ).Como no tengo un programa externo, cada script consta de dos partes: crear un archivo zip a partir de una tabla y luego volver a crear la tabla a partir del archivo zip.Esto supone que usted tiene el control de cómo un proceso externo podría empaquetar y presentar los datos a JMP.
Puntos clave: los archivos zip pueden contener datos binarios (primer ejemplo) o imprimibles (segundo ejemplo).Jsl MatrixToBlob y BlobToMatrix son rápidos.No haga bucles, o simplemente recorra algunas columnas.Evite hacer bucles en cada fila durante muchas filas.La API de archivos zip de JMP agrega nuevos miembros, posiblemente cambiando el nombre real para evitar miembros anteriores… observe el deleteFile().NO es necesario borrar el zip (za=0); está insinuando que el archivo está fuera de JMP (en el disco).La conversión de números a imprimibles y viceversa es lenta y también puede generar pérdidas si los valores formateados no tienen suficientes dígitos.
El primer script coloca datos sin procesar en un archivo zip en formato "little-endian", una fila a la vez.Rápido porque no convierte de ida y vuelta a imprimible.
El segundo script coloca datos formateados para una columna en un miembro del archivo zip, una columna por miembro.Los datos numéricos van en una matriz, los caracteres en una lista.
Puede combinar ideas de ambos guiones.
Ejemplo 1
Este ejemplo asume datos numéricos binarios.debería ser realmente rápido .Los datos de los personajes no funcionarán así...
// (¡este código no ha sido probado!) genera datos numéricos de muestra
dt = Nueva mesa ( "gente" , Agregar filas ( 1e7 ) ,
Nueva columna ( "fredo" , Numérico , Continuo , Formato ( "Mejor" , 12 ) , Fórmula ( Normal aleatorio () ) ) ,
Nueva columna ( "ralph" , Numérico , Continuo , Formato ( "Mejor" , 12 ) , Fórmula ( Normal aleatorio () ) ) ,
Nueva columna ( "Jorge" , Numérico , Continuo , Formato ( "Mejor" , 12 ) , Fórmula ( Normal aleatorio () ) , )
) ;
// crea un archivo zip de muestra con datos binarios
tapete de datos = ( dt : fred << getasmatrix ) || ( dt : ralph << getasmatrix ) || ( dt : Jorge << getasmatrix ) ;
alfombra de burbujas = matriztoblob ( tapete de datos , "flotar" , 8 , "pequeño" ) ;
za = abierto ( "$temp/deleteme2.zip" , "cremallera" ) ;
nombre real = za << escribir ( "datos" , alfombra de burbujas ) ;
// borrar zip
za = 0 ;
// volver a abrir zip
za = abierto ( "$temp/deleteme2.zip" , "cremallera" ) ;
espectáculo ( za << directorio ) ; // comprobar miembros
comenzar = ticksegundos () ;
extracto de blobe = za << leer ( nombre real , formato ( gota )) ;
extracto de datos = blobtomatrix ( extracto de blobe , "flotar" , 8 , "pequeño" , 3 /*columnas*/ ) ;
dtextracto = nueva mesa () ;
dtextracto << establecermatriz ( extracto de datos ) ;
detener = ticksegundos () ;
espectáculo ( detener - comenzar ) ;
detener - iniciar = 2.01666666666279; // descomprimido+cargado 10.000.000 filas x 3 columnas en 2 a 3 segundos
Ejemplo 2
Aquí hay otra variación, más lenta pero flexible (maneja números y caracteres):
// (¡este código no ha sido probado!) hacer datos numéricos de muestra
dt = Nueva mesa ( "gente" , Agregar filas ( 1e6 ) ,
Nueva columna ( "fredo" , Numérico , Continuo , Formato ( "Mejor" , 12 ) , Fórmula ( Normal aleatorio () ) ) ,
nueva columna ( "fred char" , personaje , fórmula ( carbonizarse ( entero aleatorio ( 1000 , 99999 )))) ,
Nueva columna ( "ralph" , Numérico , Continuo , Formato ( "Mejor" , 12 ) , Fórmula ( Normal aleatorio () ) ) ,
nueva columna ( "ralph char" , personaje , fórmula ( carbonizarse ( entero aleatorio ( 1000 , 99999 )))) ,
Nueva columna ( "Jorge" , Numérico , Continuo , Formato ( "Mejor" , 12 ) , Fórmula ( Normal aleatorio () ) , ) ,
nueva columna ( "george char" , personaje , fórmula ( carbonizarse ( entero aleatorio ( 1000 , 99999 ))))
) ;
dt << ejecutar fórmulas () ;
// crea un archivo zip de muestra con datos binarios
intentar ( borrar archivo ( "$temp/deleteme.zip" )) ;
za = abierto ( "$temp/deleteme.zip" , "cremallera" ) ;
colista = dt << obtener referencia de columna ;
para ( i = 1 , i <= nitems ( colista ) , i ++,
datos = colista [ i ] << getasmatrix ;
nombre = colista [ i ] << obtener nombre ;
za << escribir ( nombre , carbonizarse ( datos )) ;
) ;
// borrar zip
za = 0 ;
// volver a abrir zip
comenzar = ticksegundos () ;
za = abierto ( "$temp/deleteme.zip" , "cremallera" ) ;
nombres de columna = za << directorio ; // comprobar miembros
dtextracto = nueva mesa ( "extraído" ) ;
para ( i = 1 , i <= nitems ( nombres de columna ) , i ++,
TXT = za << leer ( nombres de columnas [ i ]) ;
dtextracto << nueva columna ( nombres de columna [ i ] , valores ( analizar gramaticalmente ( TXT ))) ;
) ;
detener = ticksegundos () ;
espectáculo ( detener - comenzar ) ;
detener - iniciar = 12.3500000000349; // descomprimido+cargado 1.000.000 x 6 en 12 a 14 segundos