eine Schleife erstellenIch möchte mit dem folgenden Skript eine Spalte mit den Zeilennummern zu mehreren Datentabellen hinzufügen:
dt<<NEW column=""></NEW>
Ich bin noch neu im Scripting. Wie kann ich alle meine Datentabellen automatisch verarbeiten? Ich habe diese Informationszeile, die funktionieren könnte, aber es scheint, dass es ein Problem beim Auffinden von "Datentabelle" gibt ...
Names Default To Here( 1 );
// Create a list of data tables to be updated
dtList = {"Table1", "Table2", etc...};
// Loop through each of the data tables and add the column
For( i = 1, i <= N Items( dtList ), i++,
dt = Data Table( dtList[i] );
Re: Schleife erstellenVielen Dank Jeff. Das ist großartig.
Ich muss unbedingt die Zeit finden, mir die Lektüre des Scripting-Guides genauer anzusehen. Es wird mir helfen.Re: Schleife erstellenSie haben eine Reihe von Problemen.
Sie haben verwirrt Dirpfad Und alle Dateien und sie falsch in Ihrem Code verwendet. Das Ergebnis von Verzeichnis auswählen() , Dirpfad , ist eine Zeichenfolge, die der Pfad zu dem Verzeichnis ist, das der Benutzer auswählt. Sie haben versucht, es in der Indizierung Ihrer For()-Schleife unten zu verwenden, als ob es die Liste der Dateien hätte.
Das Ergebnis von Dateien im Verzeichnis() , alle Dateien , ist die Liste der Dateien im Verzeichnis. Das ist es, was Sie überschleifen sollten.
Sie müssen Offen() die Datentabellen, bevor Sie die neue Spalte hinzufügen können.
Seit der alle Dateien list sind nur die Dateinamen, Sie müssen das Verzeichnis verketten, Dirpfad , im Argument von Open().
Schließlich sollten Sie sicherstellen, dass Sie nur versuchen, JMP-Datentabellen zu öffnen, indem Sie die Erweiterung der Dateien überprüfen. Im folgenden Beispielcode mache ich das mit der Wort() Funktion. Das Argument -1 fragt nach dem letzten Wort in der Zeichenfolge.
dirpath = Pick Directory();
allfiles = Files In Directory( dirpath );
// Loop through each of the files and add the column
Show( allfiles );
For( i = 1, i <= N Items( allfiles ), i++,
If( Word( -1, allfiles[i], "." ) == "jmp",
dt = Open( dirpath || allfiles[i] );
dt << New Column( "Sequence", numeric, formula( Row() ) );
)
);
Besuche die Loslegen Abschnitt der Datentabellen Kapitel der Skriptleitfaden für eine Einführung in die Arbeit mit Datentabellen.
Re: Schleife erstellenIch habe beim Kopieren des Skripts einen Fehler in meiner Nachricht gemacht, aber ich habe mit der richtigen Version gearbeitet und trotzdem bekomme ich eine Fehlermeldung mit der Debug-Option:
Unerwartetes „Für“. Vielleicht fehlt ein ; oder .
Re: Schleife erstellenSie haben "dispath" in Ihrer Schleife.Ändern Sie es in "dirpath"
Re: Schleife erstellenScheinbar. Es ist noch nicht richtig. Irgendetwas stimmt mit der "For"-Zeile nicht?
<SPAN class="token comment">dirpath = Pick Directory();<BR />allfiles = Files in Directory (dirpath);<BR />all files<BR /><BR />// Loop through each of the files and add the column</SPAN>
<SPAN class="token function">For</SPAN><SPAN class="token punctuation">(</SPAN> i <SPAN class="token operator">=</SPAN> <SPAN class="token number">1</SPAN><SPAN class="token punctuation">,</SPAN> i <SPAN class="token operator"><=</SPAN> <SPAN class="token function">N Items</SPAN><SPAN class="token punctuation">(</SPAN> dirpath <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">,</SPAN> i<SPAN class="token operator">++</SPAN><SPAN class="token punctuation">,</SPAN>
dt <SPAN class="token operator">=</SPAN> <SPAN class="token function">Data Table</SPAN><SPAN class="token punctuation">(</SPAN> dispath<SPAN class="token punctuation">[</SPAN>i<SPAN class="token punctuation">]</SPAN> <SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN>
dt<SPAN class="token operator"><</SPAN><SPAN class="token operator"><</SPAN><SPAN class="token function">new column</SPAN><SPAN class="token punctuation">(</SPAN><SPAN class="token string">"Sequence"</SPAN><SPAN class="token punctuation">,</SPAN> numeric<SPAN class="token punctuation">,</SPAN> formula<SPAN class="token punctuation">(</SPAN><SPAN class="token function">Row</SPAN><SPAN class="token punctuation">(</SPAN><SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN>
<SPAN class="token punctuation">)</SPAN><SPAN class="token punctuation">;</SPAN>
Re: Schleife erstellenEs gibt Befehle, um ein Verzeichnis auszuwählen und alle Dateien in diesem Verzeichnis aufzulisten.
Ich würde empfehlen, bei jeder Datei zu prüfen, ob es sich um eine JMP-Datei handelt (zB durch Prüfen der Dateiendung).
dirpath = Pick Directory();
allfiles = Files in Directory(dirpath);
allfiles
Re: Schleife erstellenJa! Es funktioniert gut !
Ist es möglich, beim Start des Skripts das Öffnen aller Datentabellen, die sich in einem Ordner befinden, anzufordern, um das Skript danach auszuführen? Sollen die Titel jeder Datei nacheinander in den "listoftables" angezeigt werden? Das kostet viel Zeit… was raten Sie mir, vorzugehen?
Vielen Dank im Voraus
Re: Schleife erstellenDas folgende Skript funktioniert bei mir. Wenn dies bei Ihnen nicht der Fall ist, wäre es hilfreich, den Inhalt Ihres Protokolls (Hauptmenü => Fenster => Protokoll) und die Version von JMP, die Sie verwenden, zu posten.
listoftables = {"Untitled 5", "Untitled 4", "Untitled 3"};
// Loop through each of the data tables and add the column
For( i = 1, i <= N Items( listoftables ), i++,
dt = Data Table( listoftables[i] );
dt<<NEW column=""></NEW>