CIAO!
Il mio script attuale per aprire una directory contenente file CSV e concatenarli in un file master non funziona e speravo di ottenere informazioni sul motivo per cui ciò accade. Ho già specificato le variabili dir e files e il ciclo sembra terminare dopo aver preso il primo file, quando ce ne sono 4 nella cartella. Inoltre, esiste uno script per leggere il nome del file CSV e utilizzarlo per riempire una nuova colonna?
Per ( io = 1 , io < N articoli (file), i++,
questa tabella = Aprire (dir || file[i]);
// crea una nuova colonna per indicare l'ID SD
Nuova colonna ( "EX801.SD.ID" ,Carattere, Risposta multipla);
Per ogni riga (:EX801.SD.ID = "Esegui1" ); // bloccato durante l'immissione dell'ID SD: è necessario il nome del file!
questa tabella << Sposta le colonne selezionate ( {:EX801.SD.ID}, Al primo);
// cancella le colonne "......PV"
Per (io= N Col (questaTabella), i > 32 , io--, // Sono necessarie le prime 32 colonne
questa tabella << eliminare colonne ( Colonna (io));
);
// aggiunge "I" davanti al nome di ogni colonna per farla corrispondere successivamente al nome della colonna
Per ( io = 3 , io <= 32 , i++,
Colonna (questaTabella, i) << Imposta nome ( "IO" || ( Colonna (questaTabella, i) << Ottieni nome ) );
);
dt << Concatenare (questo tavolo, "Aggiungi alla prima tabella" );
Chiudi (questa tabella);
dt << Seleziona Dove ( Manca (:ORA)) << Elimina righe ;
);
grazie mille per questa opzione! Tuttavia, non riesco a pulirlo utilizzando uno script in loop dopo che i file sono stati importati. Qualche suggerimento sul perché è così?
// importa file CSV dalla cartella selezionata
questa tabella = Importazione di più file (
<< Imposta cartella (dir),
<< Imposta il filtro dei nomi ( "*.*;" ),
<< Imposta Nome Abilita ( 0 ),
<< Imposta il filtro delle dimensioni ( { 254056 , 261197 } ),
<< Imposta dimensione abilitata ( 0 ),
<< Imposta il filtro data ( { 3632893806 , 3633422386 } ),
<< Imposta data abilitata ( 0 ),
<< Imposta Aggiungi colonna nome file ( 1 ),
<< Imposta la colonna Aggiungi dimensione file ( 0 ),
<< Imposta Aggiungi colonna data file ( 0 ),
<< Imposta la modalità di importazione ( "Dati CSV" ),
<< Imposta carattere ( "Miglior ipotesi" ),
<< Imposta la modalità Stack ( "Stack simile" ),
<< Imposta CSV con intestazioni ( 1 ),
<< Imposta CSV Consenti numerico ( 1 ),
<< Imposta la prima riga di intestazione CSV ( 1 ),
<< Imposta il numero CSV di righe di intestazione ( 1 ),
<< Imposta la prima riga dati CSV ( 2 ),
<< Imposta la virgola EOF CSV ( 1 ),
<< Imposta la scheda EOF CSV ( 0 ),
<< Imposta lo spazio EOF CSV ( 0 ),
<< Imposta gli spazi EOF CSV ( 0 ),
<< Imposta CSV EOF Altro ( "" ),
<< Imposta CSV EOL CRLF ( 1 ),
<< Imposta CSV EOL CR ( 1 ),
<< Imposta CSV EOL LF ( 1 ),
<< Imposta il punto e virgola CSV EOL ( 0 ),
<< Imposta CSV EOL Altro ( "" ),
<< Imposta preventivo CSV ( "\!"" ),
<< Imposta l'escape CSV ( "" )
)<< Importa dati ;
questa tabella << Sposta le colonne selezionate ( {:Nome file}, Al primo);
// cancella le colonne "......PV" // bloccato qui
Per (k = N Col (questaTabella), k > 32 , K--, // Sono necessarie le prime 32 colonne
questa tabella << Elimina colonne ( Colonna (K));
);
Il tuo problema è che stai utilizzando la variabile "i" in due cicli For, dove un ciclo For è all'interno dell'altro... pertanto, il valore di "i" non viene incrementato correttamente per il ciclo esterno.
Ho modificato la variabile Loop per i loop interni nello script seguente.Questa potrebbe essere la tua soluzione
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;
);
Se utilizzi JMP 14, potresti essere in grado di utilizzare la funzione Multiple File Import().