Hola a todos,
Soy un idiota de scripting y necesito una mano para realizar una tarea simple. Necesito un script que permita a un usuario seleccionar un solo directorio, busque archivos CSV en el directorio y agregue / concatene los archivos en un único JMP con capacidad de datos. Por ahora, está bien si este "maestro de datos" se reconstruye con los archivos CSV en el directorio cada vez que el usuario ejecuta el script.
Investigué un poco y encontré algo del genio residente txnelson que debería cumplir la tarea, pero cuando lo ejecuto recibo un error y no entiendo por qué. La secuencia de comandos:
Names Default To Here( 1 );
// Setup an empty table to start to concatenate other tables to
dtbase = New Table( "Base Table" );
// Have the user select the starting folder
dirpath = Pick Directory( "Pick the Top Level Directory" );
// Get all of the files in all of the folders that are under the picked folder
TheFileList = Files In Directory( dirpath, "recursive" );
// Go through all of the files and read in append those that meet your
// requirement. You will need to amend the IF statement to meet your criteria
For( i = 1, i <= N Items( TheFileList ), i++,
If( Uppercase( Word( -1, TheFileList, "." ) ) == "CSV" & Is File( dirpath || TheFileList ) == 1,
dt = Open( dirpath || TheFileList );
dtbase = dtbase << concatenate( dt, append to first table( 1 ) );
Close( dt, nosave );
);
);Cuando ejecuto el script, se ejecuta hasta que selecciono el directorio, y luego no pasa nada. Pasé por el código y aquí es donde se produce el error:
el argumento debe ser un carácter en el acceso o evaluación de 'Word', Argumento incorrecto (TheFileList), Word / * ### * / (- 1, TheFileList, ".")
No entiendo lo que significa esta jerga. El código parece tener sentido. ¿Por qué no funciona?
Gracias y lo siento por ser un idiota.
Me alegra que lo hayas resuelto, disculpa las molestias, y puedo explicártelo. Poco después de que Jim Nelson publicara ese código, la comunidad JMP pasó por una conversión importante. El problema que encontraste es uno que todavía estoy captando en mi viejo Blog Publicaciones: a veces, el proceso de conversión eliminó los subíndices de JSL incrustados en una publicación. (Si miras más abajo en la publicación de Jim, puedes ver una imagen que alguien capturó que incluye el subíndice ... ¡en realidad estuvo bien por algunos meses!)
@txnelson @Jeff_Perkinson
puesto antiguo
Resolvió el problema investigando un poco más. Supongo que debe haber una pequeña "i" encerrada entre paréntesis para recorrer los diferentes archivos recogidos por Archivos en el Directorio, que se asignó a TheFileList. Ni siquiera sé por dónde empezar, no tenía idea de que uno pudiera recorrer "elementos" como este, ni siquiera sabría dónde encontrar esta función en la guía de JSL de más de 700 páginas. Secuencias de comandos es imposible.
If( Uppercase( Word( -1, TheFileList[i], "." ) ) == "CSV" & Is File( dirpath || TheFileList[i] ) == 1,
dt = Open( dirpath || TheFileList[i] );
dtbase = dtbase << concatenate( dt, append to first table( 1 ) );
Close( dt, nosave );
);
);