J'ai l'impression que c'est une question simple, mais je n'arrive pas du tout à faire fonctionner cela.
Le contexte est que j'ai un extracteur XML qui doit, de manière frustrante, gérer des n-uplets composés principalement (à part une ligne) d'entrées redondantes à quelques niveaux de la structure. J'essaie de trouver ces entrées "en double" et de vérifier si ce sont effectivement des doublons avant de les importer dans ma plus grande table. J'ai réussi à vérifier le nombre de répétitions, mais j'ai du mal à faire fonctionner ma boucle for/if imbriquée. En fait, la boucle plante systématiquement tout le logiciel si j'ai un Eval( Eval Expr(....Expr())) imbriqué au mauvais endroit. Je ne sais pas pourquoi, et je me demande si je ne comprends pas simplement comment utiliser cette construction.
Je suppose que cela peut également être un problème avec l'utilisation de char() et concatenate90 imbriqués l'un dans l'autre, mais encore une fois, je ne sais pas pourquoi. Le code actuel que j'ai ci-dessous fait planter le logiciel.
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);Le code ne fonctionne pas malgré tout, mais jusqu'à ce que je puisse obtenir cette instruction If comparant la colonne avec le nom concaténé à la première des colonnes n-tuplées, cela n'a pas d'importance, et je dois d'abord faire fonctionner la concaténation et pas de crash jsl.
Quelqu'un a des idées ? Suis-je simplement stupide avec la syntaxe ?
Pour la concaténation, vous n'avez pas besoin du Eval(Eval Epr(Expr())), vous pouvez le réduire à
for(i=2,i<10,i++,
colname=Concat("Scan Append Number_", Char(i));
Print(colname));@hogi Bon point! Donc, dans ma fatigue d'hier soir, j'ai oublié de mentionner dans ma question initiale que je me suis en fait tourné vers la construction Eval(Eval Expr(Expr())) spécifiquement parce que la version simple Char(i) ne fonctionnait pas et était ma première source d'un crash du logiciel.
Cependant, j'ai trouvé le problème. Je traitais la deuxième condition d'une boucle for comme étant "jusqu'à", alors que c'est une condition "pendant". Donc plutôt qu'une inégalité, j'avais une égalité (i = répétitions), donc je suppose que c'était juste une itération jusqu'à ce que ∞, parce que pour une raison quelconque, cela s'est arrêté sur un test, et j'avais 137 ans, et les répétitions devraient être au maximum de 3.
J'ai appris quelque chose aujourd'hui.
Merci pour votre aide!