Salut à tous,
Je suis un idiot du scripting et j'ai besoin d'un coup de main pour accomplir une tâche simple. J'ai besoin d'un script qui permet à un utilisateur de sélectionner un seul répertoire, de rechercher des fichiers CSV dans le répertoire et d'ajouter / concaténer les fichiers dans un seul fichier datable JMP. Pour l'instant, c'est bien si ce "maître de données" est reconstruit avec les fichiers CSV du répertoire chaque fois que l'utilisateur exécute le script.
J'ai fait des recherches et trouvé quelque chose du génie résident super-utilisateur txnelson qui devrait accomplir la tâche, mais lorsque je l'exécute, je reçois une erreur et je ne comprends pas pourquoi. Le scénario:
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 );
);
);Lorsque je lance le script, il s'exécute jusqu'à ce que je sélectionne le répertoire, puis rien ne se passe. J'ai parcouru le code et voici où l'erreur est renvoyée:
l'argument doit être caractère dans l'accès ou l'évaluation de 'Word', argument incorrect (TheFileList), Word / * ### * / (- 1, TheFileList, ".")
Je ne comprends pas ce que ce jargon signifie. Le code semble avoir du sens. Pourquoi ça ne marche pas?
Merci et désolé d'être un idiot.
Content que tu l'aies compris, désolé pour le problème, et je peux t'expliquer. Peu après que Jim Nelson ait publié ce code, la communauté JMP a connu une conversion majeure. Le problème que vous avez rencontré est celui que je rattrape toujours dans mon vieux Blog posts: parfois, le processus de conversion supprimait les indices de JSL incorporés dans un post. (Si vous regardez plus bas dans le message de Jim, vous pouvez voir une photo d'une personne capturée incluant l'indice, c'est vraiment correct depuis quelques mois!)
@txnelson @Jeff_Perkinson
ancien poste
Résolvez le problème en faisant des recherches supplémentaires - je suppose qu’il faut mettre un petit "i" entre crochets pour parcourir les différents fichiers récupérés par Files in Directory, qui a été attribué à TheFileList. Je ne sais même pas par où commencer - je ne savais pas qu'on pourrait parcourir des "éléments" comme celui-ci - ne saurais même pas où trouver cette fonction dans le guide JSL de plus de 700 pages. L'écriture de script est impossible.
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 );
);
);