JSL non funziona nella versione 19 ma funziona nella versione 17Ho appena aggiornato JMP dalla versione 17 alla 19. Ho una routine lunga e complessa che funziona correttamente con JMP 17, ma non con la versione 19. Potrebbero esserci altri problemi, ma il primo che riscontro riguarda la selezione delle righe da modificare per correggere errori noti nei dati importati. Durante il debug, ho notato che il comando "Get Rows Where" restituisce una matrice vuota. Ho verificato che la riga selezionata sia presente nella tabella dati e posso forzare il programma a selezionarla inserendo i criteri nelle finestre di menu.
row_to_update = newContrib << Get Rows Where(:"request_id" == 263496 & :"line_no" == 0);
Il comando successivo non riesce ad apportare la correzione desiderata a quella riga perché row_to_update restituisce questo: [](0, 1)
newContrib è stato definito in precedenza come una tabella di dati. Quando passo il mouse sopra il nome della variabile, il pop-up mostra la tabella corretta.
Basandomi sulla documentazione, ho provato a modificare la riga per usare Where invece, ma ho fallito allo stesso modo.
row_to_update = newContrib[Where(:"request_id" == 263496 & :"line_no" == 0)];
Non ho trovato nulla nelle note di rilascio. A quanto pare, la sintassi è corretta, stando ai manuali di aiuto.
Qualcuno potrebbe spiegarmi cosa è cambiato perché questo sistema non funzioni più e magari anche come risolverlo?
Grazie mille!
Nancy
Automazione e scriptingOggetto: JSL non funziona nella versione 19 ma funziona nella versione 17<< Get Rows Where funziona ancora in questo modo in JMP 19. Il tuo secondo comando (che utilizza Where()) dovrebbe cambiare un po'.
Names Default To Here( 1 );
dt= Open( "$SAMPLE_DATA/Big Class.jmp" );
row_to_update = dt<< Get Rows Where( :"name" == "JANE" & :"age" == 12 ); //[3]
row_to_update2 = Where( dt, :name == "JANE" & :age == 12 ); //[3]
row_to_update = Where( newContrib, :request_id == 263496 & :line_no == 0 );
Quale potrebbe essere il problema? Verifica che i tipi di dati siano corretti. JMP 19 importa quelle colonne come caratteri, mentre JMP 17 le importava come numeriche? Probabilmente si tratta di qualcosa di semplice come questo, dato che la sintassi per << Get Rows Where non è cambiata.
Oggetto: JSL non funziona nella versione 19 ma funziona nella versione 17Ciao Nancy,
[](0,1) significa che row_to_update è una lista vuota, quindi non ci sono righe corrispondenti nella tabella dati. Poiché Get Rows Where () restituisce una lista, potrebbe essere più utile l'approccio diverso nello script seguente:
names default to here (1);
newContrib = New Table( "newContrib",
Add Rows( 3 ),
New Column( "request_id",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [263496, 263496, 263496] )
),
New Column( "line_no",
Numeric,
"Continuous",
Format( "Best", 12 ),
Set Values( [0, 0, 1] )
)
);
row_to_update = newContrib << Get Rows Where(:"request_id" == 263496 & :"line_no" == 0);
//row_to_update is [1,2]
row_to_update = newContrib << Get Rows Where(:"request_id" == 263497 & :"line_no" == 0);
//row_to_update is empty: [](0, 1)
row_to_update = (newContrib << Get Rows Where(:"request_id" == 263496 & :"line_no" == 0))[1];
//row_to_update is 1
//a different approach:
rows_to_update = newContrib << Get Rows Where(:"request_id" == 263496 & :"line_no" == 0);
if (n items(rows_to_update) > 0, row_to_update = rows_to_update[1]);
Oggetto: JSL non funziona nella versione 19 ma funziona nella versione 17Grazie per la spiegazione sulla sintassi corretta di "Dove", per aver confermato che la sintassi di "Ottieni righe dove" non era cambiata e, soprattutto, per avermi suggerito di controllare i tipi di dati! Era proprio quello il problema (i numeri interi venivano importati come caratteri). Infatti, tutti i miei dati su una dozzina di fogli vengono ora importati come caratteri, mentre prima venivano riconosciuti automaticamente come vari tipi. Si tratta di un cambiamento di comportamento di importazione così fondamentale che non mi era mai venuto in mente di controllarlo, quindi apprezzo molto il promemoria che mi ha ricordato di aver dimenticato di tornare alle basi! Inoltre, aggiungere righe per cambiare i tipi di dati delle colonne o rivedere le impostazioni del comando di apertura è una soluzione molto più semplice che modificare la sintassi delle centinaia di righe di codice che utilizzano "Ottieni righe dove"!
Grazie molto,
Nancy
Oggetto: JSL non funziona nella versione 19 ma funziona nella versione 17Sono contento che funzioni per te. Un'aggiunta che vorrei fare è suggerirti di aggiornare il tuo script per utilizzare Where(). Il miglioramento delle prestazioni è piuttosto significativo. Ad esempio, ho eseguito questo codice su una tabella con un milione di righe. Where() è risultato circa un ordine di grandezza più veloce di <
Names Default to Here( 1 );
dt = Current Data Table();
now = HP Time();
row_to_update = dt << Get Rows Where( :request_id == 220681 & :line_no == 70 );
then = HP Time();
elapsed = then - now;
Show( elapsed ); //119053
Wait( 2 );
now = HP Time();
row_to_update = Where( dt, :request_id == 220681 & :line_no == 70 );
then = HP Time();
elapsed = then - now;
Show( elapsed ); //11777