Concatena le tabelle e chiudi i file di inputSto cercando un modo per chiudere i tavoli aperti e serviti per l'input
For( f2 = 1, f2 < N elementi( Tabelle ), f2++,
ConcTable = Tabelle[f2] << /*####*/Concatenate(
Tabelle[f2 + 1],
Nome tabella di output ("Entrambi")
) /*####*/;
Chiudi( listafile[f2], Nessun salvataggio );
);
La risposta nel registro è:
Send Expects Scriptable Object in accesso o valutazione di 'Send' , Tables[f2] << /*####*/Concatenate( Tables[f2 + 1], Output Table Name( "Both" ) ) /*####* /
Ri: Concatena tabelle e chiudi i file di input
@rc_hertzy ha scritto:
Bella soluzione. Innanzitutto, un errore di battitura (segno uguale non segno meno): la quarta riga dovrebbe essere
dt=tabella dati(1);
Ora, come posso mantenere una colonna per la fonte? Se mi limito ad aggiungere
Crea colonna di origine
nell'istruzione Concatenate, ottengo colonne di origine successive e nessuna è ciò che voglio, elencando tutti i file di origine.
Correlati: quando ho concatenato manualmente i file e ho copiato lo script Source dal file di output a una finestra di script, non veniva eseguito, dando l'errore di non trovare i nomi di file elencati. Ecco lo script (File1.jmp è il file aperto selezionato):
dt = Tabella dati corrente();
dt << Concatenare (
Tabella dati ( "File2.jmp" ),
Tabella dati ( "File3.jmp" ),
Tabella di output( "Combinedtest.jmp" ),
Crea colonna di origine
);
Grazie. -Rick
Ho trovato il mio errore nell'ultima parte. Avevo rinominato un file di dati, quindi ovviamente lo script non è riuscito a trovarlo.
Tuttavia, vorrei un modo per modificare la tua soluzione per aggiungere una colonna di origine, quindi non ho bisogno di elencare esplicitamente tutti i file aperti. Grazie.
Ri: Concatena tabelle e chiudi i file di inputBella soluzione. Innanzitutto, un errore di battitura (segno uguale non segno meno): la quarta riga dovrebbe essere
dt=tabella dati(1);
Ora, come posso mantenere una colonna per la fonte? Se mi limito ad aggiungere
Crea colonna di origine
nell'istruzione Concatenate, ottengo colonne di origine successive e nessuna è ciò che voglio, elencando tutti i file di origine.
Correlati: quando ho concatenato manualmente i file e ho copiato lo script Source dal file di output a una finestra di script, non veniva eseguito, dando l'errore di non trovare i nomi di file elencati. Ecco lo script (File1.jmp è il file aperto selezionato):
dt = Tabella dati corrente();
dt << Concatenare (
Tabella dati ( "File2.jmp" ),
Tabella dati ( "File3.jmp" ),
Tabella di output( "Combinedtest.jmp" ),
Crea colonna di origine
);
Grazie. -Rick
Ri: Concatena tabelle e chiudi i file di inputecco un metodo semplice per concatenare le tabelle, e chiudere quelle non necessarie
Names Default To Here( 1 );
Final_Table="Data_" || char(ntable);
// Concatenate the tables and delete them. Add all of the tables to the first table
dt-data table(1);
For( i = 2, i <= N Table(), i++,
dt << concatenate(data table(i), append to first table(1));
close(data table(i), nosave);
);
// Rename the table to the desired name
dt << set name(Final_Table);
Ri: Concatena tabelle e chiudi i file di inputJim,
Se guardi nelle due tabelle allegate, hanno lo stesso numero di colonne e nomi di colonna. L'unica cosa che differenzia entrambi è il numero di righe. La colonna n. 1 è il timestamp e in base a questo i duplicati verranno rimossi.
Il metodo come funziona con script. Sto cercando un modo efficace per salvare il tavolo finale e chiudere i tavoli che sono stati l'input per la finale.
Distinti saluti,
cristiano
Ri: Concatena tabelle e chiudi i file di inputPotete fornire un campione delle vostre tabelle di dati e un'illustrazione di quali sarebbero le righe duplicate?
Ri: Concatena tabelle e chiudi i file di inputJim, grazie per la risposta. Consentitemi di espandere ulteriormente. L'obiettivo è concatenare un elenco di tabelle di dati ed eliminare le doppie righe. Eventuali tabelle di dati che hanno contribuito alla chiusura della tabella concatenata finale. Il numero di tabelle di dati di input è variabile. La selezione dei datatbales da concatenare segue la regola che le stringhe iniziali sono uguali e il nome finale della tabella dati concatenata è la stessa stringa.
Ecco ora il codice per la concatenazione e l'eliminazione di doppie righe oltre al salvataggio della tabella finale.
If(N Items(filelist)>0,
for (nu_t = 1, nu_t <= num_tables, nu_t++,
FinalTable = Munger(filelist[1],6,4);
Final_Table = "Data_"||FinalTable||".jmp";
//Mostra(FinalTable);
for (f2 = 1, f2 < nitems(Tabelle), f2++,
ConcTable = Tables[f2] << Concatenate(Tables[f2+1], Output Table Name( "Both" ) );
Chiudi( Tabelle[f2] , Nessun salvataggio );
);
// Elimina righe doppie
ConcTable = Tabella dati corrente();
col_min = Parse( "Col Min( Row(), :Name(\!"" || Concat Items( ConcTable << ottiene i nomi delle colonne( string ), "\!"), :Name(\!"" ) || "\!"))" );
duplicati = [];
Per ogni riga( If( col_min != Row(), duplicati |/= Row() ) );
ConcTable << elimina le righe (duplicati);
ConcTable << Save(Path_datatable_out||Final_Table);
//For(cc=1,cc <= nitems(Tabelle),cc++, Close(Tabelle[cc], Nessun salvataggio));
);
); // Se Condizione
Non vedo l'ora per la tua risposta.
cristiano
Ri: Concatena tabelle e chiudi i file di inputEcco un pezzo di codice che funzionerà e segue la logica di ciò che hai specificato. Tuttavia, non capisco perché vorresti farlo.......quindi forse il risultato non sarà quello che stai immaginando. In caso contrario, rispondi con quello che dovrebbe essere il risultato finale.
Names Default To Here( 1 );
// Create sample tables
dt = Open( "$SAMPLE_DATA\big class.jmp" );
dt << subset( selected rows( 0 ), selected columns( 0 ), by( :age ) );
Close( dt, nosave );
// Create your Tables list
Tables = {};
For( i = 1, i <= N Table(), i++,
Insert Into( Tables, Data Table( i ) << get name )
);
// Run the concatinations
For( f2 = 1, f2 < N Items( Tables ), f2++,
ConcTable = Data Table( Tables[f2] ) << Concatenate( Data Table( Tables[f2 + 1] ), Output Table Name( "Both" ) );
Close( Data Table( Tables[f2] ), No Save );
);