come faccio a creare due cicli annidati?Salve, sto tentando di scrivere uno script che segua questo flusso di lavoro:
1 - inizia un ciclo in una certa data di inizio (ad es. 1 ottobre 2021 11:00).Mi riferirò a questo come riga n.Ottieni valore da col1[riga n].
2 - vai alla riga successiva, n+1. imposta col2 = col1 [n+1] - col1[n].
3 - vai alla riga successiva, n+2, imposta col2 = col1 [n+2] - col1[n]
4 - vai alla riga successiva, n+3, imposta col2 = col1[ n+3] - col1[n].Continua a scorrere ogni riga successiva fino a datetime[n+k] = datetime[n] + 7 giorni.(Nota che k varierà a seconda dell'incremento di tempo tra le righe man mano che il ciclo procede; ad esempio, il tempo aumenta da una riga all'altra di 5 minuti, 15 minuti, 1 ora, ecc., a seconda della riga in questione.)
5 - Ripetere i passaggi da 1 a 4 per ogni nuova settimana di dati utilizzando una nuova "data di inizio" ottenuta nel passaggio 4. Continuare a scorrere altri 7 giorni di dati.
6 - Ripetere il passaggio 5 fino a quando la tabella dati non esaurisce le righe.
L'obiettivo è eseguire calcoli sui dati col1 che confrontano il valore di righe di una settimana con la prima riga di quella settimana, quindi ripetere questo più e più volte per ogni settimana successiva (settimana 2, settimana 3, settimana 4, ecc.) le righe sono state elaborate.:)
ScriptingRe: come faccio a creare due loop nidificati?Puoi dare una piccola tabella di dati con quello che ti aspetti che siano i dati?O almeno com'è la tabella dati che stai usando? Sembra che una formula di colonna sarebbe una soluzione più semplice.
Re: come faccio a creare due loop nidificati?Penso che potresti dire qualcosa del genere?
Names default to here(1);
dt = New Table( "Untitled 1133",
Add Rows( 5 ),
New Column( "Week1",
Numeric,
"Continuous",
Format( "d/m/y h:m:s", 22, 0 ),
Input Format( "d/m/y h:m:s", 0 ),
Set Values( [3716957885, 3716957886, 3716957887, 3716957888, 3716957889] )
),
New Column( "Week2",
Numeric,
"Continuous",
Format( "d/m/y h:m:s", 22, 0 ),
Input Format( "d/m/y h:m:s", 0 ),
Set Values( [3716957885, 3716957886, 3716957887, 3716957888, 3716957889] )
),
New Column( "Week3",
Numeric,
"Continuous",
Format( "d/m/y h:m:s", 22, 0 ),
Input Format( "d/m/y h:m:s", 0 ),
Set Values( [3716957885, 3716957886, 3716957887, 3716957888, 3716957889] )
)
);
nc = ncols(dt);
for(i=1, i<=nc, i++,
col_name = column(i) << Get Name(); // get the original column name
Eval(EvalExpr( // you have to do this so you can substitute in the actual col_name instead of a variable
dt << New Column(col_name || " comparison",
// just take current row minus first row
formula(Expr(column(dt, col_name))[row()]-Expr(column(dt, col_name))[1])
)
));
);
Re: come faccio a creare due loop nidificati?Sicuro.Grazie.In allegato è un frammento di un set di dati che ho creato in Excel come esempio.
Re: come faccio a creare due loop annidati?Grazie Vincenzo.Sto affrontando questo ora .... come principiante JSL (!) Ho un paio di domande che mi aiuteranno a seguire il tuo approccio.Perché sono state aggiunte 5 righe a una nuova tabella di dati?Perché hai bisogno di "impostare valori" e perché quei cinque numeri sono stati selezionati?Il tuo script è per 3 settimane ma il mio set di dati effettivo ha circa 120 settimane.
Infine, come fa lo script a sapere quale colonna è il valore su cui calcolare (cioè "flusso" nel mio esempio)?(La mia tabella di dati ha più colonne delle tre mostrate nel mio esempio.) Non sarebbe più facile assegnare il nome della colonna piuttosto che scorrere le colonne?Probabilmente mi manca qualcosa qui.