Hallo, Unten (Abschnitt A) ist mein Code für eine Formel in einer neuen Spalte und es funktioniert. Ich möchte jedoch eine for-Schleife verwenden, um sie zu ersetzen. Ich habe es versucht (Abschnitt
, aber es gibt überhaupt keine Ausgabe. Ich frage mich, ob mir jemand einen Rat zu meinem Fehler in Abschnitt B geben kann? das Beispiel der Spalte smap1 befindet sich in der angehängten Tabelle. Vielen Dank
Abschnitt a:
dt3 << new column("smap", character,
formula(
If(N Rows( Loc( Words( :smap1, "," ), "0" ) ) >= 3, "0:0:0:0:0:0:0:0",
N Rows( Loc( Words( :smap1, "," ), "1" ) ) >= 3, "1:1:1:1:1:1:1:1",
N Rows( Loc( Words( :smap1, "," ), "2" ) ) >= 3, "2:2:2:2:2:2:2:2",
N Rows( Loc( Words( :smap1, "," ), "3" ) ) >= 3, "3:3:3:3:3:3:3:3",
N Rows( Loc( Words( :smap1, "," ), "4" ) ) >= 3, "4:4:4:4:4:4:4:4",
N Rows( Loc( Words( :smap1, "," ), "5" ) ) >= 3, "5:5:5:5:5:5:5:5",
N Rows( Loc( Words( :smap1, "," ), "6" ) ) >= 3, "6:6:6:6:6:6:6:6",
N Rows( Loc( Words( :smap1, "," ), "7" ) ) >= 3, "7:7:7:7:7:7:7:7",
"0:1:2:3:4:5:6:7"
);
);
);Abschnitt b:
dt3 << new column("smap", character,
formula(
map={"0","1","2","3","4","5","6","7"};
for (l=1, l<=N items(map), l++,
A=":"||map[l];
B=map[l];
If(N Rows( Loc( Words( :smap1, "," ), char(map[l])) )>= 3, concat(B,A,A,A,A,A,A,A),
"0:1:2:3:4:5:6:7"
);
)
)
);Ihre Formel gibt ein zurück Leer() Wert.Das Für() Schleife wird beendet, wenn l = 9 .Die Logik ist, wann l = 8 Die Schleife kehrt zum Inkrementierer und dann zum Test zurück.Die Prüfung für l <= N Artikel ( Karte ) schlägt fehl und gibt einen leeren Wert zurück.Was Sie tun müssen, ist, die Schleife an dem Punkt zu beenden Ob() Anweisung wahr ist, dann das Ergebnis zurückgeben.Hier ist ein Beispiel:
dt3 << New Column( "smap",
character,
formula(
res = "0:1:2:3:4:5:6:7";
For( l = 0, l < 8, l++,
If( N Rows( Loc( Words( :smap1, "," ), Char( l ) ) ) >= 3,
res = Concat Items( Repeat( Insert( {}, Char( l ) ), 8 ), ":" );
Break();
);
);
res;
)
);