So durchlaufen Sie ein Skript durch mehrere CSV-DateienIm Anschluss an einen früheren Beitrag habe ich ein Skript, das eine unhandliche CSV-Datei stapelt und formatiert.
https://community.jmp.com/t5/Discussions/Help-doing-a-table-transform-and-converting-a-timestamp/td-p/303091
Meine nächste Hilfefrage lautet: Wie schaffe ich es, dies dann für eine Gruppe von CSV-Dateien in einem Ordner zu wiederholen und dabei den Dateinamen als eine der Spalten zu erfassen und sie idealerweise auch zu stapeln? auch bekannt als Step1-, Step2-, Step3- und Step4-Dateien.
Durch das Stapeln einer einzelnen CSV-Datei wird eine 400.000-Zeilen-Ausgabe erstellt. Besteht die Gefahr eines Absturzes, wenn ich 4, 8 oder 10 dieser CSV-Dateien zusammenführe?
Vielleicht wäre es zusätzlich, dann noch einmal durch den nächsten Ordner im übergeordneten Ordner zu blättern und eine neue kombinierte Schrittdatei zu erstellen?
names default to here(1);
//Prompt to select and open an MS Excel file
dt = Open( Pick File( "Select Excel File", "C:\Users\folder\", {"Excel Files|csv;xlsx;xls", "All Files|*"}, 1, 0 ), Invisible );
// Get the column names from the data table
colNames = dt << get column names;
// Remove the 1st col from the list
remove from(colNames,1,1);
// Stack the data
dtStack = dt << Stack(
columns(
colNames
),
Source Label Column( "Label" ),
Stacked Data Column( "Data" ),
Output Table( "Stacked_Data" )
);
//label the 1st column to Lamda
:Column 1 << Set Name("Lamda");
:Lamda << Modeling Type(nominal);
// Create a new JMP DateTime column
dtStack << New Column( "Timestamp",
Numeric,
"Continuous",
Format( "d/m/y h:m:s", 26, 3 ),
Input Format( "d/m/y h:m:s", 0 ),
Formula( Informat( Word( 1, :Label, "Z" ), "d/m/y h:m:s" ) )
);
// Remove formula to convert column to static values
dtStack:Timestamp << delete formula;
// Create the Time variable column
dtstack << New Column( "Time",
Numeric,
"Continuous",
Format( "hr:m:s", 17, 3 ),
Input Format( "hr:m:s", 0 ),
Formula( Time Of Day( :Timestamp ) )
);
//Create Absolute Time column, uses if>then error checking for Lamda group changing
dtstack << New Column( "AbsTime",
Numeric,
"Continuous",
Format( "Fixed Dec", 12, 1 ),
Formula(
If( Row() == 1 | :Lamda != Lag( :Lamda ),
0,
Lag( :AbsTime ) + (:Timestamp - Lag( :Timestamp ))
)
),
);
// Remove formula to convert column to static values
dtStack:AbsTime << delete formula;
// Get rid of no longer needed "Label" column
dtStack << delete columns( "Label" );
Datenmischung und -bereinigungBetreff: So durchlaufen Sie ein Skript durch mehrere CSV-DateienEs sieht so aus, als ob der Code für die Liste der Dateinamen „filelist“ anstelle von „filename“ verwenden möchte. Der gegen Ende.
Betreff: So durchlaufen Sie ein Skript durch mehrere CSV-DateienIch habe mir das angesehen, aber es scheint nicht meinen Bedürfnissen zu entsprechen. Es werden lediglich einzelne JMP-DTs geöffnet. Die Spaltennummern sind dynamisch und basieren auf dem Zeitbereich für jede Prozessdatei.
Betreff: So durchlaufen Sie ein Skript durch mehrere CSV-DateienEindrucksvoll. Es scheint zu funktionieren, aber nach der ersten Datei treten Fehler auf
„Name nicht aufgelöst: Dateiname}1} beim Zugriff oder bei der Auswertung von ‚Dateiname‘, Dateiname/*###*/“
irgendwelche Gedanken?
Ich habe das Skript auch so angepasst, dass ein Popup zur Ordnerauswahl ausgeführt wird. Ich gehe davon aus, dass das nicht das Problem ist.
// Get a list of files from the directory
dir = Pick Directory( "Select a directory", "C:\Users\folder\");
fileList = Files In Directory( dir );
// Create a skeleton data table to end up being the combined data table
dtFinal = New Table("Final");
// Loop across all of the files found in the directory and read them in
For(i = 1, i <= N Items( fileList ), i++,
dt = open( dir || fileList[i] );Betreff: So durchlaufen Sie ein Skript durch mehrere CSV-DateienSchauen Sie sich auch den Mehrfachdateiimport an. Es lädt CSV-Dateien, verkettet sie, wenn sie dieselben Spalten haben, und kann optional die Dateinamenspalte hinzufügen.
Betreff: So durchlaufen Sie ein Skript durch mehrere CSV-DateienIm Grunde müssen Sie nur Folgendes tun
- Verwenden Sie „Files In Directory()“, um die Liste der zu verarbeitenden Dateien abzurufen
- Richten Sie eine Datentabelle ein, die für die endgültige Datentabelle verwendet werden soll (dtFinal).
- Verwenden Sie eine For()-Schleife, um alle im Verzeichnis gefundenen Dateien zu durchlaufen und die deStack-Tabelle zu erstellen
- Fügen Sie die Quellspalte zu dtStack hinzu
- Verketten Sie dtStack mit der dtFinal-Tabelle
- Schließen Sie die Datentabellen dtStack und dt
Unten sehen Sie Ihr Skript, das mit den oben genannten Elementen geändert wurde.Der Code wird nicht getestet und Sie müssen das Verzeichnis usw. hinzufügen, aus dem die Dateien gelesen werden sollen.Es sollte Ihnen einen wirklich guten Ausgangspunkt für den Erhalt Ihres Endprodukts bieten
names default to here(1);
//Prompt to select and open an MS Excel file
//dt = Open( Pick File( "Select Excel File", "C:\Users\folder\", {"Excel Files|csv;xlsx;xls", "All Files|*"}, 1, 0 ), Invisible );
// Get a list of files from the directory
fileList = Files In Directory( <PATH to="" your="" directory=""> || fileList[i] );
// Get the column names from the data table
colNames = dt << get column names;
// Remove the 1st col from the list
remove from(colNames,1,1);
// Stack the data
dtStack = dt << Stack(
columns(
colNames
),
Source Label Column( "Label" ),
Stacked Data Column( "Data" ),
Output Table( "Stacked_Data" )
);
//label the 1st column to Lamda
:Column 1 << Set Name("Lamda");
:Lamda << Modeling Type(nominal);
// Create a new JMP DateTime column
dtStack << New Column( "Timestamp",
Numeric,
"Continuous",
Format( "d/m/y h:m:s", 26, 3 ),
Input Format( "d/m/y h:m:s", 0 ),
Formula( Informat( Word( 1, :Label, "Z" ), "d/m/y h:m:s" ) )
);
// Remove formula to convert column to static values
dtStack:Timestamp << delete formula;
// Create the Time variable column
dtstack << New Column( "Time",
Numeric,
"Continuous",
Format( "hr:m:s", 17, 3 ),
Input Format( "hr:m:s", 0 ),
Formula( Time Of Day( :Timestamp ) )
);
//Create Absolute Time column, uses if>then error checking for Lamda group changing
dtstack << New Column( "AbsTime",
Numeric,
"Continuous",
Format( "Fixed Dec", 12, 1 ),
Formula(
If( Row() == 1 | :Lamda != Lag( :Lamda ),
0,
Lag( :AbsTime ) + (:Timestamp - Lag( :Timestamp ))
)
),
);
// Remove formula to convert column to static values
dtStack:AbsTime << delete formula;
// Get rid of no longer needed "Label" column
dtStack << delete columns( "Label" );
// Add filename as a column to the data table
dtStack << new column( "Source", character, set each value( filename[i] ) );
// Concatenate to final table
dtFinal << concatenate( dtStack, append to first table(1) );
// Clean up
close( dtStack, nosave );
close( dt, nosave );
// End For() Loop
);</PATH>