Hallo!
Mein aktuelles Skript zum Öffnen eines Verzeichnisses mit CSV-Dateien und zum Verketten dieser Dateien in einer Masterdatei funktioniert nicht, und ich hatte gehofft, Erkenntnisse darüber zu erhalten, warum das so ist. Ich habe bereits die Variablen „dir“ und „files“ angegeben und die Schleife scheint nach der Aufnahme der ersten Datei zu enden, wenn sich 4 im Ordner befinden. Gibt es außerdem ein Skript, um den Dateinamen der CSV-Datei zu lesen und ihn zum Füllen einer neuen Spalte zu verwenden?
Für ( ich = 1 , ich < N Artikel (Dateien), i++,
thisTable = Offen (dir || files[i]);
// erstellt eine neue Spalte zur Angabe der SD-ID
Neue Spalte ( „EX801.SD.ID“ ,Charakter, Mehrfachantwort);
Für jede Reihe (:EX801.SD.ID = „Lauf1“ ); // bleibt bei der Eingabe der SD-ID hängen – Dateiname erforderlich!
thisTable << Ausgewählte Spalten verschieben ( {:EX801.SD.ID}, To First );
// löscht die Spalten „......PV“
Für (ich = N Cols (dieseTabelle), i > 32 , ich--, // 1. 32 Spalten werden benötigt
thisTable << Spalten löschen ( Spalte (ich));
);
// fügt vor jedem Spaltennamen ein „I“ hinzu, um später mit dem Spaltennamen abgeglichen zu werden
Für ( ich = 3 , ich <= 32 , ich++,
Spalte ( thisTable, i ) << Name einsetzen ( "ICH" || ( Spalte ( thisTable, i ) << Holen Sie sich den Namen ) );
);
dt << Verketten (dieser Tisch, „An erste Tabelle anhängen“ );
Close (thisTable);
dt << Wählen Sie „Wo“. ( Wird vermisst (:TIME)) << Zeilen löschen ;
);
Vielen Dank für diese Option! Allerdings kann ich es nach dem Import der Dateien nicht mit einem Schleifenskript bereinigen. Irgendwelche Vorschläge, warum das so ist?
// CSV-Dateien aus ausgewähltem Ordner importieren
thisTable = Mehrere Dateiimport (
<< Ordner festlegen ( dir),
<< Namensfilter festlegen ( "*.*;" ),
<< Stellen Sie die Namensaktivierung ein ( 0 ),
<< Größenfilter festlegen ( { 254056 , 261197 } ),
<< Stellen Sie die Größe ein ( 0 ),
<< Datumsfilter festlegen ( { 3632893806 , 3633422386 } ),
<< Datum aktivieren festlegen ( 0 ),
<< Legen Sie „Dateinamenspalte hinzufügen“ fest ( 1 ),
<< Legen Sie die Spalte „Dateigröße hinzufügen“ fest ( 0 ),
<< Legen Sie die Spalte „Dateidatum hinzufügen“ fest ( 0 ),
<< Legen Sie den Importmodus fest ( „CSVData“ ),
<< Zeichensatz festlegen ( "Beste Annahme" ),
<< Stellen Sie den Stapelmodus ein ( „Ähnlich stapeln“ ),
<< Legen Sie fest, dass CSV Header hat ( 1 ),
<< Stellen Sie CSV „Numerisch zulassen“ ein ( 1 ),
<< Legen Sie die erste CSV-Kopfzeile fest ( 1 ),
<< Legen Sie die CSV-Anzahl der Kopfzeilen fest ( 1 ),
<< Legen Sie die erste CSV-Datenzeile fest ( 2 ),
<< Legen Sie das CSV-EOF-Komma fest ( 1 ),
<< Legen Sie die CSV-EOF-Registerkarte fest ( 0 ),
<< Legen Sie den CSV-EOF-Bereich fest ( 0 ),
<< Legen Sie CSV-EOF-Leerzeichen fest ( 0 ),
<< Legen Sie CSV EOF Andere fest ( „“ ),
<< Legen Sie CSV EOL CRLF fest ( 1 ),
<< Legen Sie die CSV-EOL-CR fest ( 1 ),
<< Legen Sie CSV EOL LF fest ( 1 ),
<< Legen Sie das CSV-EOL-Semikolon fest ( 0 ),
<< Legen Sie CSV EOL Andere fest ( „“ ),
<< CSV-Angebot festlegen ( „\!““ ),
<< CSV-Escape festlegen ( „“ )
) << Daten importieren ;
thisTable << Ausgewählte Spalten verschieben ( {:Dateiname}, To First );
// löscht die Spalten „......PV“ // bleibt hier hängen
Für (k = N Cols (dieseTabelle), k > 32 , k--, // 1. 32 Spalten werden benötigt
thisTable << Spalten löschen ( Spalte (k));
);
Ihr Problem besteht darin, dass Sie die Variable „i“ in zwei For-Schleifen verwenden, wobei sich eine For-Schleife innerhalb der anderen befindet. Daher wird Ihr Wert von „i“ für die äußere Schleife nicht ordnungsgemäß erhöht.
Ich habe die Schleifenvariable für die inneren Schleifen im folgenden Skript geändert.Das könnte Ihre Lösung sein
For( i = 1, i < N Items( files ), i++,
thisTable = Open( dir || files[i] );
// creates new column to indicate SD ID
New Column( "EX801.SD.ID", Character, Multiple Response );
For Each Row( :EX801.SD.ID = "Run1" ); // stuck at inputing SD ID - need file name!
thisTable << Move Selected Columns( {:EX801.SD.ID}, To First );
// deletes columns "......PV"
For( k = N Cols( thisTable ), k > 32, k--, // 1st 32 columns are needed
thisTable << delete columns( Column( k ) );
);
// adds "I" in front of each column name to be matched with column name later
For( k = 3, k <= 32, k++,
Column( thisTable, k ) << Set Name( "I" || (Column( thisTable, k ) << Get Name) );
);
dt << Concatenate( thisTable, "Append to First Table" );
Close( thisTable );
dt << Select Where( Is Missing( :TIME ) ) << Delete Rows;
);
Wenn Sie JMP 14 verwenden, können Sie möglicherweise die Funktion „Multiple File Import()“ verwenden.
Wählen Sie „Datei“ > „Mehrere Dateiimport“. Weitere Informationen finden Sie unter Hilfe > JMP verwenden. Alle Optionen können per Skript ausgeführt werden. Verwenden Sie es beim ersten Mal interaktiv, um sicherzustellen, dass Sie in einem bekannten Fall die Ergebnisse erhalten. Kopieren Sie dann das Quelltabellenskript in Ihr eigenes Skript.