Hallo zusammen,
Ich bin ein Scripting-Idiot und brauche eine Hand, um eine einfache Aufgabe zu erledigen. Ich brauche ein Skript, mit dem ein Benutzer ein einzelnes Verzeichnis auswählen, im Verzeichnis nach CSV-Dateien suchen und die Dateien an eine einzige JMP-Datentabelle anhängen bzw. verketten kann. Für den Moment ist es in Ordnung, wenn diese "Master-Datentabelle" bei jedem Ausführen des Skripts mit den CSV-Dateien im Verzeichnis neu erstellt wird.
Ich habe etwas recherchiert und etwas von einem ansässigen Superbenutzergenie txnelson gefunden, das die Aufgabe erfüllen sollte, aber wenn ich es ausführen, erhalte ich eine Fehlermeldung und verstehe nicht, warum. Das Skript:
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 );
);
);Wenn ich das Skript starte, wird es ausgeführt, bis ich das Verzeichnis auswähle. Dann passiert nichts. Ich habe den Code durchgegangen und hier ist der Fehler:
Argument sollte ein Zeichen für den Zugriff oder die Auswertung von 'Word', 'Bad Argument (TheFileList)', Word / * ### * / (- 1, TheFileList, ".") sein.
Ich verstehe nicht, was dieser Jargon bedeutet. Der Code scheint sinnvoll zu sein. Warum funktioniert es nicht?
Danke und tut mir leid, dass du ein Idiot bist.
Ich bin froh, dass Sie es herausgefunden haben, entschuldigen Sie die Mühe und ich kann es erklären. Kurz nachdem Jim Nelson diesen Code veröffentlicht hatte, wurde die JMP-Community umfassend konvertiert. Das Problem, auf das Sie gestoßen sind, ist eines, das ich immer noch in meinem alten fange Blog posts: Manchmal löschte der Konvertierungsprozess die in einem Post eingebetteten Subskriptionen von JSL. (Wenn Sie in Jims Beitrag nach unten schauen, können Sie ein Bild sehen, das jemand aufgenommen hat und das den Index enthält ... es war wirklich für einige Monate richtig!)
@txnelson @ Jeff_Perkinson
alte Post
Das Problem wurde durch Nachforschungen gelöst. Ich denke, es muss ein kleines "i" in Klammern sein, um die verschiedenen Dateien zu durchsuchen, die von Files in Directory, das TheFileList zugewiesen wurde, abgerufen wurden. Ich weiß nicht einmal, wo ich anfangen soll - ich hatte keine Ahnung, wie man durch solche Elemente blättern könnte - hätte nicht einmal gewusst, wo man diese Funktion im 700-seitigen JSL-Handbuch findet. Scripting ist unmöglich.
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 );
);
);