Ich habe das Gefühl, dass dies eine einfache Frage ist, aber ich schaffe es beim besten Willen nicht, sie zum Laufen zu bringen.
Der Kontext ist, dass ich einen XML-Extraktor habe, der frustrierenderweise mit n-Tupeln meist (abgesehen von einer Zeile) redundanten Einträgen auf ein paar Ebenen in der Struktur umgehen muss. Ich versuche, diese „doppelten“ Einträge zu finden und zu prüfen, ob es sich tatsächlich um Duplikate handelt, bevor ich sie in meine größere Tabelle importiere. Ich muss die Anzahl der Wiederholungen überprüfen, aber es fällt mir furchtbar schwer, meine verschachtelte for/if-Schleife zum Laufen zu bringen. Tatsächlich stürzt die Schleife ständig die gesamte Software ab, wenn ich ein Eval( Eval Expr(....Expr())) an der falschen Stelle verschachtelt habe. Ich bin mir nicht sicher, warum das so ist, und ich frage mich, ob ich die Verwendung dieser Konstruktion einfach falsch verstehe.
Ich vermute, dass es auch ein Problem sein könnte, wenn char() und concatate90 ineinander verschachtelt verwendet werden, obwohl ich mir auch hier nicht sicher bin, warum das so sein sollte. Der aktuelle Code, den ich unten habe, führt zum Absturz der 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);Der Code funktioniert trotzdem nicht, aber bis ich die If-Anweisung bekomme, die die Spalte mit dem verketteten Namen mit der ersten der n-tupled-Spalten vergleicht, spielt es keine Rolle, und zuerst muss ich die Verkettung zum Laufen bringen und jsl nicht zum Absturz bringen.
Hat jemand irgendwelche Gedanken? Bin ich nur dumm mit der Syntax?
Für die Verkettung benötigen Sie Eval(Eval Epr(Expr())) nicht, Sie können es auf reduzieren
for(i=2,i<10,i++,
colname=Concat("Scan Append Number_", Char(i));
Print(colname));@hogi Guter Punkt! In meiner Müdigkeit gestern Abend habe ich vergessen, in meiner ursprünglichen Frage zu erwähnen, dass ich mich tatsächlich dem Konstrukt Eval(Eval Expr(Expr())) zugewandt habe, und zwar speziell deshalb, weil die einfache Char(i)-Version nicht funktionierte und meine erste war Ursache für einen Absturz der Software.
Allerdings habe ich das Problem gefunden. Ich habe die zweite Bedingung einer for-Schleife als „bis“ behandelt, während es sich um eine „while“-Bedingung handelt. Anstelle einer Ungleichung hatte ich also eine Gleichheit (i = Wiederholungen), daher vermute ich, dass es sich nur um eine Iteration bis handelte ∞, weil es aus irgendeinem Grund bei einem Test aufgehört hat, und ich war 137, und die Wiederholungen sollten bei maximal 3 liegen.
Ich habe heute etwas gelernt.
Vielen Dank für Ihre Hilfe!