Salut tout le monde,
J'ai une table de données avec plusieurs colonnes, dont certaines que je veux ajouter ensemble. Dans le cadre de mon script, je sélectionne certaines des colonnes, stocke les noms de colonne dans une liste, puis espère ajouter les colonnes sélectionnées à l'aide de la fonction "Somme".
Pour ce faire, j'ai besoin de créer une chaîne ":DATA1, :DATA2, :DATA3" et de l'analyser dans une colonne.
New Column( "Addition", Numeric, Continuous, Formula( Parse( Sum( :DATA1, :DATA2, :DATA3 ) ) ) );
Un extrait du code que j'utilise est ci-dessous:
New Column( "Addition", Numeric, Continuous, Formula( Parse( Sum( :DATA1, :DATA2, :DATA3 ) ) ) );
list = {"DATA1", "DATA2", "DATA3"};
For( i = 1, i <= N Items( list ), i++,
If(
i == 1, string = ":" || Char( Eval( list[Eval( i )] ) ),
i > 1, string = string || "," || ":" || Char( Eval( list[Eval( i )] ) )
)
);
Parse( string );
A l'exécution, j'obtiens l'erreur suivante :
Inattendu ",". Il manque peut-être un ";" ou ",".
Ligne 1 Colonne 7 : DATA1►,:DATA2,:DATA3
Le texte restant qui a été ignoré était
,:DONNEES2,:DONNEES3
:DONNÉES1
Y a-t-il quelque chose qui me manque?
Merci d'avance!
Merci pour l'aide et l'explication ! La colonne "Yet Another Data" de votre script fait exactement ce que je veux. La colonne "Another Data" semble renvoyer une cellule vide avec une erreur "besoin d'arguments pour être des scalaires, des matrices ou des listes...". Je vais essayer de comprendre pourquoi cela se produit.
Regardez la chaîne dans laquelle il revient.
":DONNEES1,:DONNEES2,:DONNEES3"
Essayez d'exécuter cela sans les guillemets, vous obtiendrez la même chose.
Si vous avez des noms de colonnes sous forme de chaînes, vous pouvez faire quelque chose comme ça.
Names default to here(1);
dt = New Table( "Example",
Add Rows( 1 ),
New Column( "Data1", Set Values( [1] )),
New Column( "Data2", Set Values( [2] )),
New Column( "Data3", Set Values( [3] )),
);
// list of column names as strings
list = dt << Get Column Names("string"); // {"Data1", "Data2", "Data3"}
SumExpr = Expr(Sum());
for(i=1, i<=nitems(list), i++,
insert into(SumExpr, Column(dt, list[i]));
);
// see what the sumExpr looks like
show(nameexpr(sumExpr));
// then you have to do some substitute in order to actually get it to run
just_for_show = EvalExpr(
dt << New Column("Another Data", Formula(Expr(nameexpr(SumExpr))));
);
show(nameexpr(just_for_show));
just_for_show();// this will actually run the expression you just created.
// or you could use the list in Sum Directly.
// list of column names as references
list = dt << Get Column Names();
list=list[1::3];
// can do a list directly in Sum()
// should still substitute it in so it's no dependant on then list variable
just_for_show =Substitute(
Expr(
dt << new Column("Yet Another Data", Formula(Sum(DV_LIST)))
),
Expr(DV_LIST), list
);
show(nameexpr(just_for_show));
just_for_show(); // actually evaluates again.