Siento que esta es una pregunta simple, pero por mi vida no puedo hacer que esto funcione.
El contexto es que tengo un extractor XML que, frustrantemente, tiene que lidiar con n-tuplas de entradas redundantes en su mayoría (aparte de una fila) en un par de niveles de la estructura. Estoy tratando de encontrar esas entradas "duplicadas" y verificar si realmente lo son antes de importarlas a mi tabla más grande. He controlado el número de repeticiones, pero me está costando mucho conseguir que funcione mi bucle for/if anidado. De hecho, el bucle bloquea constantemente todo el software si tengo un Eval( Eval Expr(....Expr())) anidado en el lugar equivocado. No estoy seguro de por qué es así y me pregunto si no estoy entendiendo bien cómo utilizar esa construcción.
Supongo que también puede ser un problema con el uso de char() y concatenate90 anidados uno dentro del otro, aunque nuevamente, no estoy seguro de por qué sería así. El código actual que tengo a continuación bloquea el 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);El código no funciona de todos modos, pero hasta que pueda obtener esa declaración If que compara la columna con el nombre concatenado con la primera de las columnas n-tupladas, no importa, y primero necesito que la concatenación funcione y no bloquear jsl.
¿Alguien tiene alguna idea? ¿Estoy siendo tonto con la sintaxis?
Para la concatenación no necesita Eval(Eval Epr(Expr())), puede reducirlo a
for(i=2,i<10,i++,
colname=Concat("Scan Append Number_", Char(i));
Print(colname));@hogi ¡Buen punto! Entonces, en mi fatiga de anoche, olvidé mencionar en mi pregunta original que en realidad recurrí a la construcción Eval(Eval Expr(Expr())) específicamente porque la versión simple Char(i) no funcionó y fue mi primera fuente de un fallo en el software.
Sin embargo, encontré el problema. Estaba tratando la segunda condición de un bucle for como "hasta", mientras que es una condición "mientras". Entonces, en lugar de una desigualdad, tenía una igualdad (i = reps), así que supongo que solo estaba iterando hasta ∞, porque por alguna razón se detuvo en una prueba, yo tenía 137 y las repeticiones deberían ser como máximo 3.
He aprendido algo hoy.
¡Gracias por tu ayuda!