Sento che questa è una domanda semplice, ma non riesco a farlo funzionare.
Il contesto è che ho un estrattore XML che deve gestire in modo frustrante n-tuple di voci ridondanti per lo più (a parte una riga) a un paio di livelli nella struttura. Sto cercando di trovare quelle voci "duplicate" e di verificare se sono effettivamente duplicati prima di importarle nella mia tabella più grande. Ho controllato il numero di ripetizioni, ma mi sto divertendo moltissimo a far funzionare il mio ciclo nidificato for/if. In effetti, il ciclo blocca costantemente l'intero software se ho un Eval( Eval Expr(....Expr())) nidificato nel posto sbagliato. Non sono sicuro del perché, e mi chiedo se sto solo fraintendendo come utilizzare quella costruzione.
Suppongo che potrebbe anche essere un problema con l'utilizzo di char() e concatenate90 annidati l'uno nell'altro, anche se, ancora una volta, non sono sicuro del motivo per cui dovrebbe essere. Il codice attuale che ho di seguito blocca il software.
colnames = dt << Get Column Names( String );
show(colnames);
reps = 0;
show(reps);
For( i = 1, i <= N Items( colnames), i++,
reps = Sum( reps, Contains(colnames[i], "Data - Common Counting Time")); show(reps)
);
check = 0;
//Repeats that split columns
colnamecount = "Scan Append Number_4"; //Using a file that only has three of these columns, so show(colnamecount) = *_4 means its not going past that first if statment
If( reps> 1,
For( i = 2, i = reps, i++,
Eval(Eval Expr(colnamecount = Concat("Scan Append Number_", Char(Expr(i))))); //This is the issue
If(dt:{"Scan Append Number_1"}[1] == Column( colnamecount )[1],
check = check + 1,
check = check + 12
)
)
);
show(check);Il codice non funziona a prescindere, ma finché non riesco a ottenere l'istruzione If confrontando la colonna con il nome concatenato con la prima delle colonne n-tuple, non ha importanza e prima devo far funzionare la concatenazione e non mandare in crash jsl.
Qualcuno ha qualche idea? Sono solo stupido con la sintassi?
Per la concatenazione non è necessario Eval(Eval Epr(Expr())), puoi ridurlo a
for(i=2,i<10,i++,
colname=Concat("Scan Append Number_", Char(i));
Print(colname));@hogi Giusto punto! Quindi, nella mia stanchezza, ieri sera, ho dimenticato di menzionare nella mia domanda originale che in realtà mi sono rivolto al costrutto Eval(Eval Expr(Expr())) specificamente perché la semplice versione Char(i) non funzionava, ed è stata la mia prima causa di un arresto anomalo del software.
Tuttavia, ho riscontrato il problema. Stavo trattando la seconda condizione di un ciclo for come "fino a", mentre è una condizione "mentre". Quindi, invece di una disuguaglianza, avevo un'uguaglianza (i = ripetizioni), quindi suppongo che stesse semplicemente ripetendo fino a quando ∞, perché per qualche motivo si è fermato durante un test, e io avevo 137, e le ripetizioni dovrebbero essere al massimo 3.
Ho imparato qualcosa oggi.
Grazie per l'aiuto!