Pour chaque ligne avec Insertion dansJ'ai des difficultés avec une instruction INSERT INTO à l'intérieur d'une boucle FOR Each ROW. Je souhaite rechercher une catégorie dans la colonne « Type » et, en fonction de cette recherche, sélectionner la valeur correspondante dans la colonne « COLUMN_NAME » afin de créer une liste pour chaque catégorie. Je pense que mon erreur se situe au niveau de l'instruction INSERT INTO.
// 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) ;
);
));
déclaration.
Automatisation et scriptageRe: Pour chaque ligne avec Insertion dansIl est inutile d'utiliser une boucle « Pour chaque ligne » ici (si j'ai bien compris votre objectif). Utilisez simplement « Pour chaque ligne » avec « Obtenir les lignes où » et l'indexation de la table de données pour récupérer les valeurs dans votre liste.
Re: Pour chaque ligne avec Insertion dansLe code fourni est inexécutable et difficilement lisible, car il manque d'espacement. Je suppose qu'il a été généré par une IA, car il utilise des techniques JSL étranges (par exemple, le tri des clés d'un tableau associatif alors qu'elles sont déjà triées).
D'après le code fourni (et la question), je ne suis pas sûr de comprendre ce que vous essayez de faire. Il se peut que vous remplaciez votre liste Spud à chaque itération, ce qui est à l'origine du problème.
Re: Pour chaque ligne avec Insertion dansLes affectations consécutives
Spud = Char(Cats(i));
Spud = {};
La première entrée est écrasée par la seconde. Elles se trouvent également à l'intérieur de la boucle externe, ce qui explique pourquoi @jthi suggère que la liste est recréée plutôt qu'étendue.
Ajouter un
show( row(), spud, ...etc... );
Le fait de mentionner plusieurs endroits dans le journal pour obtenir des résultats intermédiaires peut également être utile.
write( "\!n x=" || char(x) || " y=" || char(y) );
si vous souhaitez le formater. Ou
write( Eval Insert("\!n x=^x^ y=^y^) );
qui pourrait être plus facile à lire.
L'éditeur JSL possède une commande de reformatage qui peut s'avérer utile lorsque l'indentation des boucles est visuellement incorrecte.