Hallo, unten (Abschnitt A) ist mein Code für eine Formel in einer neuen Spalte und er funktioniert. Ich möchte sie jedoch durch eine for-Schleife ersetzen. Ich habe es ausprobiert (Abschnitt
, aber es erfolgt überhaupt keine Ausgabe. Ich frage mich, ob mir jemand einen Rat zu meinem Fehler in Abschnitt B geben kann? Das Beispiel der Spalte smap1 finden Sie in der beigefügten Tabelle. Danke
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.Der Für() Schleife wird beendet, wenn l = 9 .Die Logik ist, wann l = 8 Die Schleife kehrt zum Inkrementator und dann zum Test zurück.Der Test für l <= N Elemente( Karte ) schlägt fehl und gibt einen leeren Wert zurück.Was Sie tun müssen, ist, die Schleife an der Stelle zu beenden Wenn() Aussage ist wahr, dann wird das Ergebnis zurückgegeben.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;
)
);