Für jede Zeile mit Einfügen inIch habe Schwierigkeiten mit einer INSERT INTO-Anweisung innerhalb einer FOR-EACH-Zeilenschleife. Ich möchte die Kategorie aus der Spalte „Type“ ermitteln und basierend darauf den Wert in der Spalte „COLUMN_NAME“ auswählen, um für jede Kategorie eine Liste zu erstellen. Ich glaube, der Fehler liegt in der INSERT INTO-Anweisung.
// Get the current data table
dt = Current Data Table();
colName = "Type";
// Get the column reference
Types = Column( colName );
// Extract all values from the column
allValues = Types << Get Values;
// Get unique values (removes duplicates)
Cats = Associative Array( allValues ) << Get Keys;
// Sort the unique values (optional)
Cats = Sort List( Cats );
// Display results in the log
Show( Cats );
delCats = {"", "-"};
For( i = 1, i <= N Items( delCats ), i++,
Remove From( Cats, As List( Loc( Cats, delCats[i] ) ) )
);
show(Cats);
For For( i = 1, i <= N Items( Cats ), i++,
Spud = Char(Cats(i));
Spud = {};
For Each Row(
// Access column values directly by name
If(:Type = Char(Cats[i]), Insert Into(Spud, :COLUMN_NAME) ;
);
));
Stellungnahme.
Automatisierung und SkripterstellungBetreff: Für jede Zeile mit Einfügen inDie Verwendung von „For Each Row“ ist hierfür nicht nötig (wenn ich Ihr Vorhaben richtig verstanden habe). Verwenden Sie einfach „For Each“ mit „<< Get Rows Where“ und der Datentabellenindizierung, um die Werte in Ihre Liste zu erhalten.
Betreff: Für jede Zeile mit Einfügen inDer bereitgestellte Code ist nicht ausführbar und aufgrund fehlender Formatierung schwer lesbar. Ich vermute, er wurde von einer KI generiert, da er ungewöhnliche JSL-Techniken verwendet (z. B. die Schlüssel eines assoziativen Arrays neu anordnen, obwohl diese bereits sortiert sind).
Anhand des bereitgestellten Codes (und der Frage) bin ich mir nicht sicher, was du erreichen willst. Möglicherweise ersetzt du aber in jeder Schleife deine Spud-Liste, was das Problem verursacht.
Betreff: Für jede Zeile mit Einfügen inDie aufeinanderfolgenden Aufgaben
Spud = Char(Cats(i));
Spud = {};
Sie überschreiben die erste Liste mit der zweiten. Sie befinden sich außerdem innerhalb der äußeren Schleife, weshalb @jthi vermutet, dass die Liste neu erstellt und nicht erweitert wird.
Hinzufügen eines
show( row(), spud, ...etc... );
Eine Anweisung an mehreren Stellen im Protokoll, um Zwischenergebnisse zu erhalten, kann ebenfalls hilfreich sein. Oder
write( "\!n x=" || char(x) || " y=" || char(y) );
Wenn Sie es formatieren möchten. Oder
write( Eval Insert("\!n x=^x^ y=^y^) );
was möglicherweise leichter zu lesen ist.
Der JSL-Editor verfügt über einen Reformat-Befehl, der hilfreich sein kann, wenn die Schleifeneinrückung optisch nicht korrekt ausgerichtet ist.