Salut tout le monde
Je l'ai fait une fois, et c'était douloureux mais j'ai perdu le script et le souvenir de cela. Ci-dessous ce que j'essaye de faire :
Tweak_List = dt_Temp << Obtenir les noms de colonne ("String");
for(i = 1, i <= N Items(Tweak_List),i++,
a = Gauche(Tweak_List[i], Longueur(Tweak_List[i]) - 1) || "Δ" ;
b = Tweak_List[i] ;
c = Gauche(Tweak_List[i], Longueur(Tweak_List[i]) - 2);
dt << New Column( Left(Tweak_List[i], Length(Tweak_List[i]) - 1) || "Δ", Numérique, Continu, Formule( if(:name1 == :name2, c - b, 0 ))));
);
Dans dt j'ai des colonnes nommées ColName_2 et ColName, le Tweak_List est la liste des noms de colonnes comme ColName_2.
J'ai besoin de créer une nouvelle colonne Delta nommée ColName_ Δ pour chaque paire et avoir la formule ColName - ColName_2 dans laquelle une condition est remplie.
Je me souviens que je travaillais avec Eval and Co, mais j'ai oublié. Svp aidez moi
Et comme d'habitude, j'ai finalement eu une solution, libre de rejouer avec un script plus efficace.
For(i = 1, i <= N Items(Tweak_List), i++,
Eval(
Eval Expr(
dt << New Column(Left(Tweak_List[i], Length(Tweak_List[i]) - 1) || "Δ",
Numeric,
"Continuous",
Formula(
If(:ENTITY == :ENTITY_2,
As Column(Expr(Char(Left(Tweak_List[i], Length(Tweak_List[i]) - 2)))) - As Column(Expr(Char(Tweak_List[i]))),
0
)
)
)
)
);
);
Vous pouvez utiliser Word() ou Words() au lieu de Left().
Names Default To Here(1);
dt = New Table("Untitled 143",
Add Rows(1),
Compress File When Saved(1),
New Column("Column1", Numeric, "Continuous", Format("Best", 12), Set Values([1])),
New Column("Column1_2", Numeric, "Continuous", Format("Best", 12), Set Values([2])),
New Column("Column2", Numeric, "Continuous", Format("Best", 12), Set Values([3])),
New Column("Column2_2", Numeric, "Continuous", Format("Best", 12), Set Values([4]))
);
tweaklist = {"Column1_2", "Column2_2"};
For Each({col_name}, tweaklist,
Eval(EvalExpr(
dt << New Column(Word(1, col_name, "_") || "_Δ", Numeric, Continuous, Formula(
Expr(Name Expr(As Column(col_name))) - Expr(Name Expr(As Column(Word(1, col_name, "_"))))
));
));
);
De plus, si vous n'avez pas besoin de la formule mais seulement des valeurs, vous pouvez utiliser << Set Each Value qui n'a pas besoin d'une évaluation aussi lourde
For Each({col_name}, tweaklist,
dt << New Column(Word(1, col_name, "_") || "_Δ", Numeric, Continuous, << Set Each Value(
As Column(col_name) - As Column(Word(1, col_name, "_"))
));
);