So durchlaufen Sie ein Skript durch mehrere CSV-DateienNach einem 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 Frage zur Hilfe ist, wie ich dies dazu bringen kann, es für eine Gruppe von CSVs in einem Ordner zu wiederholen, wobei der Dateiname als eine der Spalten erfasst und im Idealfall auch gestapelt wird. aka step1, step2, step3, step4 Dateien.
Durch das Stapeln einer einzelnen CSV wird eine Ausgabe von 400.000 Zeilen erstellt. Kann ich abstürzen, wenn ich 4 oder 8 oder 10 dieser CSVs zusammenführe?
Vielleicht wäre es etwas Besonderes, dann den nächsten Ordner im übergeordneten Ordner erneut zu durchlaufen 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" );
DatentabelleSkriptingBetreff: So durchlaufen Sie ein Skript durch mehrere CSV-DateienGrundsätzlich ist alles, was Sie tun müssen, zu
- Verwenden Sie "Dateien im Verzeichnis ()", 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 Dateien im Verzeichnis zu durchlaufen, in dem die deStack-Tabelle erstellt wurde
- Fügen Sie die Spalte Quelle zu dtStack hinzu
- Verketten Sie dtStack mit der Tabelle dtFinal
- Schließen Sie die Datentabellen dtStack und dt
Unten ist Ihr Skript mit den oben genannten Elementen geändert.Der Code wird nicht getestet und Sie müssen ihn im Verzeichnis usw. hinzufügen, um die Dateien lesen zu können.Es sollte Ihnen einen wirklich guten Ausgangspunkt geben, um Ihr Endprodukt zu erhalten
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>Betreff: So durchlaufen Sie ein Skript durch mehrere CSV-DateienSchauen Sie sich auch den Import mehrerer Dateien an. Es lädt CSV-Dateien, verkettet sie, wenn sie dieselben Spalten haben, und kann optional die Dateinamensspalte hinzufügen.
Betreff: So durchlaufen Sie ein Skript durch mehrere CSV-DateienGenial. Es scheint zu funktionieren, aber dann Fehler nach der ersten Datei w / an
"Name ungelöst: Dateiname} 1} beim Zugriff oder bei der Auswertung von 'Dateiname', Dateiname / * ### * /"
irgendwelche Gedanken?
Ich habe das Skript auch so angepasst, dass ein Popup für ausgewählte Ordner erstellt wird. Ich gehe davon aus, dass dies 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-DateienIch habe mir das angeschaut, aber es scheint nicht meinen Bedürfnissen zu entsprechen. Es werden nur einzelne jmp dt's geöffnet. Die Spaltennummern sind dynamisch und basieren auf dem Zeitbereich für jede Prozessdatei.