comment faire défiler un script sur plusieurs fichiers csvsuite à un article précédent, j'ai un script qui empile et formate un fichier csv peu maniable.
https://community.jmp.com/t5/Discussions/Help-doing-a-table-transform-and-converting-a-timestamp/td-p/303091
Ma prochaine question pour obtenir de l'aide est de savoir comment puis-je faire en sorte que cela se répète ensuite sur un groupe de csv dans un dossier, en capturant le nom de fichier comme l'une des colonnes, idéalement en les empilant également. aka step1, step2, step3, fichiers step4.
Empiler un seul csv crée une sortie de 400 000 lignes. Vais-je risquer de planter si je fusionne 4, 8 ou 10 de ces csv?
Peut-être qu'un supplément serait de parcourir à nouveau le dossier suivant dans le dossier parent, en créant un nouveau fichier d'étape combiné?
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" );
Tableau de donnéesScriptingRe: comment faire défiler un script dans plusieurs fichiers csvEn gros, tout ce que vous avez à faire est de
- Utilisez "Fichiers dans le répertoire () pour obtenir la liste des fichiers à traiter
- Configurer un tableau de données à utiliser pour le tableau de données final (dtFinal)
- Utilisez une boucle For () pour parcourir tous les fichiers trouvés dans le répertoire créant la table deStack
- Ajouter la colonne Source à dtStack
- Concaténer dtStack à la table dtFinal
- Fermez les tables de données dtStack et dt
Voici votre script modifié avec les éléments ci-dessus.Le code n'est pas testé et vous devez ajouter dans le répertoire etc. pour lire les fichiers.Cela devrait vous donner un très bon point de départ pour obtenir votre produit final
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>Re: comment faire défiler un script dans plusieurs fichiers csvVérifiez également l'importation de fichiers multiples. Il charge les fichiers CSV, les concatène s'ils ont les mêmes colonnes et peut éventuellement ajouter la colonne de nom de fichier.
Re: comment faire défiler un script dans plusieurs fichiers csvImpressionnant. Cela semble fonctionner, mais des erreurs après le premier fichier avec un
"Nom non résolu: filenam} 1} lors de l'accès ou de l'évaluation de 'filename', filename / * ### * /"
Des pensées?
J'ai également ajusté le script pour créer une fenêtre contextuelle de sélection de dossier, je suppose que ce n'est pas le problème.
// 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] );Re: comment faire défiler un script dans plusieurs fichiers csvJ'ai regardé cela mais cela ne semble pas répondre à mes besoins. Cela ouvrira simplement les dt jmp individuels. Les numéros de colonne sont dynamiques, en fonction de la plage de temps de chaque fichier de processus.