Impila più parametri con condizioni con JSLHo ricevuto un set di dati con più parametri con un determinato formato "TestNumber;TestName". So che possiamo facilmente farlo manualmente. Ma
Voglio impilarli tutti con JSL in modo intelligente. Come farlo in JSL? Si prega di avvisare. Grazie
Ri: Stack di parametri multipli con condizione con JSLCiao Promz,
Grazie per gli ottimi consigli! Funziona da campione!Ri: Stack di parametri multipli con condizione con JSLEra necessario convertire i nomi delle colonne in una stringa.Inoltre one_col non è una lista.Ecco il codice corretto.Ti incoraggio a farlo
a) Leggere i manuali di scripting
b) Controllare frequentemente il registro per verificare la presenza di valori variabili, messaggi di errore, ecc.
c) Continua a utilizzare questo forum di discussione
Names Default To Here( 1 );
sourceTable = Data Table( "FINAL" );
col_list = sourceTable << get column names( continuous, string );
stackcols = {};
//one_col = {};
For( i = 1, i <= N Items( col_list ), i++,
one_col = col_list[i];
show(one_col, i);
If( Regex( one_col, "(\d+);(\S+)" ) == one_col,
Insert Into( stackcols, one_col )
);
);
resultTable = sourceTable << Stack(
columns( stackcols ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
);
resultTable << setName( (sourceTable << getName) || " Stacked Data" );Ri: Stack di parametri multipli con condizione con JSLGrazie pmroz. Ho modificato lo script in base al tuo suggerimento, ma sembra che si sia verificato un errore.
Names Default To Here( 1 );
sourceTable = Data Table( "FINAL" );
col_list = sourceTable << get column names( continuous );
stackcols = {};
one_col = {};
For( i = 1, i <= N Items( col_list ), i++,
one_col = col_list[i];
If( Regex( one_col, "(\d+);(\S+)" ) == one_col,
Insert Into( stackcols, one_col )
);
);
resultTable = sourceTable << Stack(
columns( stackcols ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
);
resultTable << setName( (sourceTable << getName) || " Stacked Data" );
/************************************
Errore sconosciuto nella corrispondenza del modello nell'accesso o nella valutazione di 'Regex' , Regex/*###*/(one_col, "(\d+);(\S+)")
Ri: Stack di parametri multipli con condizione con JSLcol_list = {"2010;PinShort@CLK", "2011;PinShort@IO", "2012;PinShort@VDD", "Label", "Data"};
stackcols = {};
for (i = 1, i <= nitems(col_list), i++,
one_col = col_list[i];
if (regex(one_col, "(\d+);(\S+)") == one_col,
insertinto(stackcols, one_col);
);
);
Ri: Stack di parametri multipli con condizione con JSLCiao Nelson,
Capisco perfettamente. Eppure il mio problema è esattamente quello che hai menzionato sopra, "come popolare l'elenco stackCols" con la mia condizione parametrica con espressione regolare "(\d+);(\S+)".
Grazie comunque. Proverò a provare ed sbagliare io stesso.Ri: Stack di parametri multipli con condizione con JSL@OneNorthJMP ,
Credo che quello che Ian ti ha mostrato sia quello che stai chiedendo.Ciò che Ian ha mostrato è che ciò che devi fare è creare un elenco (stackCols) nel tuo JSL che contenga i nomi delle colonne che desideri impilare, quindi eseguire il pezzo di codice in fondo al suo script:
resultTable = sourceTable << Stack(columns(stackCols), Source Label Column( "Label" ), Stacked Data Column( "Data" ));
resultTable << setName((sourceTable << getName)||" Stacked Data");
Quindi, il problema è popolare l'elenco stackCols.Il modo in cui lo fai dipende dalle tue esigenze.Potrebbe essere facile come usarlo
stackCols = dt << get column names( continuous );
per popolare l'elenco.Oppure potrebbe richiedere una metodologia più complessa.Ma ciò che Ian ha mostrato è quanto sia semplice eseguire Stack Platform con tutti i dati attualmente presenti nella tabella dati.
Ri: Stack di parametri multipli con condizione con JSLCiao Ian,
Grazie per la risposta. Forse la mia spiegazione non è chiara. Voglio che lo script JSL possa adattare parametri diversi da diverse tabelle di input.
Ad esempio, input tabella 1, ho 2 colonne. Devo modificare il JSL di seguito.
Data Table( "FINAL.jmp" ) << Stack(
columns(
:Name( "2010;PinShort@CLK" ),
:Name( "2011;PinShort@IO" ),
:Name( "2012;PinShort@VDD" ),
:Name( "2013;PinShort@LA" ),
:Name( "2014;PinShort@LB" ),
:Name( "2030;PinOpen@CLK" )
),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
)
Ad esempio, inserisci la tabella 2, se ho 3 colonne. Devo modificare il JSL di seguito.
Data Table( "FINAL.jmp" ) << Stack(
columns( :Name( "2010;PinShort@CLK" ), :Name( "2011;PinShort@IO" ), :Name( "2012;PinShort@VDD" ), ),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
)
Allora, cosa succede se ho migliaia di colonne? Quindi devo inserirlo manualmente uno per uno? o farlo manualmente? Sì, certo che posso farlo manualmente. Ma questo non è il mio obiettivo, voglio avere uno script in grado di leggere l'espressione regolare per trovare impilare i parametri "(\d+);(\S+)", indipendentemente dalla mia tabella di input.
Ri: Stack di parametri multipli con condizione con JSLI dettagli dipenderanno esattamente da cosa intendi quando dici "il mio tavolo è dinamico" e da quanta intelligenza richiedi.
Ma, ad esempio, apportando alcune piccole modifiche al codice generato da JMP, potresti avere;
NamesDefaultToHere(1);
sourceTable = DataTable("FINAL");
stackCols =
{
:Name( "2010;PinShort@CLK" ),
:Name( "2011;PinShort@IO" ),
:Name( "2012;PinShort@VDD" ),
:Name( "2013;PinShort@LA" ),
:Name( "2014;PinShort@LB" ),
:Name( "2030;PinOpen@CLK" ),
:Name( "2031;PinOpen@IO" ),
:Name( "2032;PinOpen@VDD" ),
:Name( "2033;PinOpen@LA" ),
:Name( "2034;PinOpen@LB" ),
:Name( "2200;Ana_Idd_noClock@VDD" ),
:Name( "2360;Dig_ATE_FUN_00_001_Authenticate" ),
:Name( "2361;Dig_ATE_FUN_00_003_DisableReset" ),
:Name( "2380;Dig_ATE_FUN_00_004_GetVersion" ),
:Name( "2440;SyncPulse_and_capResponse_0x90" ),
:Name( "2441;Ana_Pads_ATE_VOL_0uA@IO" ),
:Name( "2442;Ana_Pads_ATE_VOH_0uA@IO" ),
:Name( "2443;Ana_Pads_ATE_VOL_0uA_IDD@VDD" ),
:Name( "2444;Ana_Pads_ATE_VOL_0uA_Rcont_GND@VSS" )
};
resultTable = sourceTable << Stack(columns(stackCols), Source Label Column( "Label" ), Stacked Data Column( "Data" ));
resultTable << setName((sourceTable << getName)||" Stacked Data");
I valori di "sourceTable" e "stackCols" verrebbero impostati da un'interfaccia utente o da uno script JSL più grande.
Ri: Stack di parametri multipli con condizione con JSLCiao Ian,
Lo so già. Il fatto è che il mio tavolo è dinamico. Non voglio modificare il mio script ogni volta che ho una tabella dati diversa. Ma il mio formato dei dati parametrici è corretto. Quindi, dovrebbe essere un modo intelligente per codificarlo in JSL.Ri: Stack di parametri multipli con condizione con JSLSe puoi, è una buona idea lasciare che JMP faccia il lavoro per te: in genere è necessario eseguire le operazioni "a mano" solo una volta, quindi utilizzare il codice generato automaticamente da JMP.
Nel tuo caso, se fai "Tabelle > Pila":

premendo "OK" viene visualizzata una nuova tabella con uno script salvato chiamato "Sorgente". Se fai clic con il pulsante destro del mouse sull'icona verde "Esegui" associata, puoi selezionare "Modifica", che ti darà questo script:
Data Table( "FINAL.jmp" ) << Stack(
columns(
:Name( "2010;PinShort@CLK" ),
:Name( "2011;PinShort@IO" ),
:Name( "2012;PinShort@VDD" ),
:Name( "2013;PinShort@LA" ),
:Name( "2014;PinShort@LB" ),
:Name( "2030;PinOpen@CLK" ),
:Name( "2031;PinOpen@IO" ),
:Name( "2032;PinOpen@VDD" ),
:Name( "2033;PinOpen@LA" ),
:Name( "2034;PinOpen@LB" ),
:Name( "2200;Ana_Idd_noClock@VDD" ),
:Name( "2360;Dig_ATE_FUN_00_001_Authenticate" ),
:Name( "2361;Dig_ATE_FUN_00_003_DisableReset" ),
:Name( "2380;Dig_ATE_FUN_00_004_GetVersion" ),
:Name( "2440;SyncPulse_and_capResponse_0x90" ),
:Name( "2441;Ana_Pads_ATE_VOL_0uA@IO" ),
:Name( "2442;Ana_Pads_ATE_VOH_0uA@IO" ),
:Name( "2443;Ana_Pads_ATE_VOL_0uA_IDD@VDD" ),
:Name( "2444;Ana_Pads_ATE_VOL_0uA_Rcont_GND@VSS" )
),
Source Label Column( "Label" ),
Stacked Data Column( "Data" )
)
Puoi rendere questo script più intelligente, ma se stai semplicemente aggiungendo nuove righe funzionerà correttamente (purché le colonne necessarie siano ancora nella tabella di origine).