Salut!
Mon script actuel pour ouvrir un répertoire contenant des fichiers CSV et les concaténer en un seul fichier maître ne fonctionne pas, et j'espérais comprendre pourquoi. J'ai déjà spécifié les variables dir et files, et la boucle semble se terminer après avoir pris le premier fichier, alors qu'il y en a 4 dans le dossier. Existe-t-il également un script pour lire le nom du fichier CSV et l'utiliser pour remplir une nouvelle colonne ?
Pour ( je = 1 , je < N articles ( fichiers ), i++,
cetteTable = Ouvrir (rép || fichiers[i]);
// crée une nouvelle colonne pour indiquer l'ID SD
Nouvelle colonne ( "EX801.SD.ID" ,Caractère, Réponse Multiple);
Pour chaque ligne (:EX801.SD.ID = "Exécuter1" ); // bloqué lors de la saisie de l'ID SD - besoin d'un nom de fichier !
cetteTable << Déplacer les colonnes sélectionnées ( {:EX801.SD.ID}, Vers le premier );
// supprime les colonnes "......PV"
Pour (je = N Cols (ceTableau), je > 32 , je--, // Les 32 premières colonnes sont nécessaires
cetteTable << supprimer des colonnes ( Colonne (je));
);
// ajoute "I" devant chaque nom de colonne pour correspondre ultérieurement au nom de la colonne
Pour ( je = 3 , je <= 32 , je++,
Colonne ( cetteTable, je ) << Définir le nom ( "JE" || ( Colonne ( cetteTable, je ) << Obtenir le nom ) );
);
dt << Enchaîner (cette table, "Ajouter au premier tableau" );
Fermer (thisTable);
dt << Sélectionnez où ( Est manquant (:HEURE)) << Supprimer des lignes ;
);
merci beaucoup pour cette option ! Cependant, je n'arrive pas à le nettoyer à l'aide d'un script de boucle une fois les fichiers importés. Avez-vous des suggestions sur la raison pour laquelle cela se produit ?
// importer les fichiers csv du dossier sélectionné
cetteTable = Importation de plusieurs fichiers (
<< Définir le dossier (rép.),
<< Définir le filtre de nom ( "*.*;" ),
<< Définir le nom Activer ( 0 ),
<< Définir le filtre de taille ( { 254056 , 261197 } ),
<< Définir la taille Activer ( 0 ),
<< Définir le filtre de date ( { 3632893806 , 3633422386 } ),
<< Définir la date Activer ( 0 ),
<< Définir la colonne Ajouter un nom de fichier ( 1 ),
<< Définir la colonne Ajouter la taille du fichier ( 0 ),
<< Définir la colonne Ajouter la date du fichier ( 0 ),
<< Définir le mode d'importation ( "Données CSV" ),
<< Définir le jeu de caractères ( "Meilleure estimation" ),
<< Définir le mode pile ( "Pile similaire" ),
<< Définir CSV avec des en-têtes ( 1 ),
<< Définir le format CSV autorisé numérique ( 1 ),
<< Définir la première ligne d'en-tête CSV ( 1 ),
<< Définir le nombre CSV de lignes d'en-tête ( 1 ),
<< Définir la première ligne de données CSV ( 2 ),
<< Définir la virgule CSV EOF ( 1 ),
<< Définir l'onglet CSV EOF ( 0 ),
<< Définir l'espace CSV EOF ( 0 ),
<< Définir les espaces CSV EOF ( 0 ),
<< Définir CSV EOF Autre ( "" ),
<< Définir CSV EOL CRLF ( 1 ),
<< Définir CSV EOL CR ( 1 ),
<< Définir CSV EOL LF ( 1 ),
<< Définir le point-virgule CSV EOL ( 0 ),
<< Définir CSV EOL Autre ( "" ),
<< Définir un devis CSV ( "\!"" ),
<< Définir l'échappement CSV ( "" )
) << Importer des données ;
cetteTable << Déplacer les colonnes sélectionnées ( {:Nom du fichier}, Vers le premier );
// supprime les colonnes "......PV" // bloqué ici
Pour (k = N Cols (ceTableau), k > 32 , k--, // Les 32 premières colonnes sont nécessaires
cetteTable << Supprimer des colonnes ( Colonne k));
);
Votre problème est que vous utilisez la variable "i" dans deux boucles For, où une boucle For est à l'intérieur de l'autre... ainsi, votre valeur de "i" n'est pas correctement incrémentée pour la boucle extérieure.
J'ai modifié la variable Loop pour les boucles intérieures dans le script ci-dessous.Cela pourrait être votre solution
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;
);
Si vous utilisez JMP 14, vous pourrez peut-être utiliser la fonction Multiple File Import().