Hallo alle,
Ich habe eine Datentabelle mit mehreren Spalten, von denen ich einige zusammenfügen möchte. Als Teil meines Skripts wähle ich einige Spalten aus, speichere die Spaltennamen in einer Liste und hoffe dann, die ausgewählten Spalten mithilfe der Funktion „Summe“ hinzufügen zu können.
Dazu muss ich eine Zeichenfolge „:DATA1, :DATA2, :DATA3“ erstellen und sie in einer Spalte analysieren.
New Column( "Addition", Numeric, Continuous, Formula( Parse( Sum( :DATA1, :DATA2, :DATA3 ) ) ) );
Ein Ausschnitt des Codes, den ich verwende, ist unten:
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 );
Bei der Ausführung erhalte ich die folgende Fehlermeldung:
Unerwartet ",". Möglicherweise fehlt ein „;“ oder ",".
Zeile 1 Spalte 7: :DATA1►,:DATA2,:DATA3
Der verbleibende Text, der ignoriert wurde, war
,:DATA2,:DATA3
:DATA1
Gibt es etwas, das mir fehlt?
Vielen Dank im Voraus!
Vielen Dank für die Hilfe und die Erklärung! Die Spalte „Yet Another Data“ in Ihrem Skript macht genau das, was ich will. Die Spalte „Andere Daten“ scheint eine leere Zelle mit der Fehlermeldung „Argumente müssen Skalare, Matrizen oder Listen sein …“ zurückzugeben. Ich werde versuchen herauszufinden, warum das passiert.
Schauen Sie sich die Zeichenfolge an, in der es zurückgegeben wird.
„:DATA1,:DATA2,:DATA3“
Versuchen Sie einfach, das ohne die Anführungszeichen auszuführen, Sie erhalten das Gleiche.
Wenn Sie Spaltennamen als Zeichenfolgen haben, können Sie so etwas tun.
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.