<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Tengo una carpeta con archivos 365 .csv. Quiero convertir cada archivo .csv en un archivo .jmp y eliminar algunas columnas en el archivo .jmp, luego guardar el archivo .jmp con el nombre del archivo .csv y salir de JMP. Todo esto tiene que hacerse automáticamente con un JSL-Script.
Ya tengo un script por lotes, que inicia un JSL-Script y entrega un archivo .csv al JSL-Script. El JSL-Script luego abre el archivo .csv y elimina las columnas que quiero eliminar.
Tengo un problema cuando se trata de guardar el archivo .jmp y salir de JMP con JSL-Script para que el script por lotes comience con el siguiente archivo .csv para abrir con JSL-Script.
El archivo .jmp no se guardará y, por lo tanto, JMP no se cierra, por lo que todo mi proceso por lotes se detiene, porque mi secuencia de comandos por lotes espera a que se cierre JMP.
Abro los archivos .csv según la respuesta del usuario "twaintwist" al final de esta discusión: Pasar parámetros al script JSL
Todos mis archivos .csv + el script por lotes + el script .jsl están en la misma carpeta.
Esta solución funciona bien para mí, así que aquí está mi secuencia de comandos por lotes:
para %%f en (*.csv) hacer (
echo fileName = "%%~nf.csv";>archivo.txt
copiar /y /b archivo.txt+myScript.jsl temp.jsl
JMP temp.jsl
tiempo de espera / t 5
del %%~nf.csv
tiempo de espera / t 5
del archivo.txt
tiempo de espera / t 5
del temp.jsl
)
pausa
Mi JSL-Script luego abre el archivo .csv entregado por el .bat-script y elimina algunas columnas. Pero después de eliminar las columnas, parece que mi JSL-Script simplemente se detiene.
El archivo .jmp no se guarda y JMP no se cierra. Como puede ver en el Script, probé diferentes métodos para guardar y cerrar la ventana con JSL.
Así que aquí está mi JSL-Script:
doc = Abrir (nombre de archivo);
dt = Tabla de datos actuales ();
// Desactiva la actualización de la pantalla para permitir una actualización rápida de una tabla de datos.
dt << Comenzar actualización de datos;
ColList = {
//#COLUMNAS A ELIMINAR#
};
dt << Eliminar Columnas(ColList);
dt << Finalizar actualización de datos;
longitud del nombre = longitud (nombre del archivo);
fielName = Left(fileName, nameLength - 3);
Nombre = nombre de archivo || "jmp";
dt<
doc<
esperar (10);
Cerrar (dt, nosave);
Cerrar (doc, NoGuardar);
//doc << cerrar ventana;
//dt<
//Cerrar todo(Tablas de datos, save(fileName+"jmp"));
Salir (no guardar);
Salir(noguardar);
Puede programar secuencias de comandos JSL del mismo modo que puede programar archivos .bat.
Agrega un '//!' a la primera línea de su secuencia de comandos O cambie el .jsl a un .rpt y se ejecutará automáticamente cuando se abra.Luego, simplemente haga que su programador de Windows apunte al script JMP en lugar del archivo por lotes.
Solo digo.
Desafortunadamente, este proceso pertenece a un sistema más grande y necesito poder programarlo con el programador de Windows, por lo que necesitaré el .BAT de todos modos, pero gracias por recordarme que solo se puede hacer en JSL;)
Genial, me alegro de que lo hayas hecho funcionar.
También puede hacer todo esto en JSL sin un archivo .BAT.Eso podría (o no) simplificar su proceso general.JSL tiene una función FilesInDirectory y potentes funciones de manipulación de cadenas que pueden crear y validar nombres de archivo.Si su solución actual es demasiado lenta debido a las esperas y los tiempos de espera y al inicio/detención repetidos de JMP, es posible que desee eliminar el archivo .BAT.
¡Muchas gracias! Tu solución resolvió mi problema...
Como principiante total en JSL, no sabía que había algo como un registro.
Mientras revisaba el registro, noté que mi función de eliminar columnas no funcionaba tan bien como pensaba, porque escribí mal uno de los nombres de las columnas y la función se detuvo.
Sin embargo, cerrar dt y doc también estuvo mal, pero eso no fue un gran problema al final.
Una vez más gracias por su ayuda!
Compruebe el registro de JSL para ver si hay mensajes.cerrar dt y doc puede ser un problema; son la misma mesa?