Ciao, sotto (sezione A) c'è il mio codice per una formula in una nuova colonna e funziona. Tuttavia, voglio usare for loop per sostituirlo. Ci ho provato (Sezione
, ma non c'è alcun output. Chiedo se qualcuno può darmi qualche consiglio sul mio errore sulla sezione B? l'esempio della colonna smap1 è nella tabella allegata. Grazie
sezione 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"
);
);
);sezione 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"
);
)
)
);La tua formula sta restituendo un Vuoto() valore.Il Per() il ciclo esce quando l = 9 .La logica è che quando l = 8 il ciclo ritorna all'intensificatore quindi il test.La prova per l <= N elementi (mappa) fallisce, restituendo un valore vuoto.Quello che devi fare è terminare il ciclo nel punto il Se() affermazione è vera, quindi restituisce il risultato.Ecco un esempio:
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;
)
);