Bonjour, Ci-dessous (section A) se trouve mon code pour une formule dans une nouvelle colonne et cela fonctionne. Cependant, je veux utiliser la boucle for pour la remplacer. J'ai essayé dessus (Section
, mais il n'y a pas de sortie du tout. Je me demande si quelqu'un peut me donner des conseils de mon erreur sur la section B? l'exemple de la colonne smap1 est dans le tableau joint. Merci
partie 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"
);
);
);partie 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"
);
)
)
);Votre formule renvoie un Vider() valeur.Le Pour() la boucle se termine lorsque l = 9 .La logique est que lorsque l = 8 la boucle revient à l'incrémenteur puis au test.L'épreuve pour l <= N éléments (carte) échoue, renvoyant une valeur vide.Ce que vous devez faire est de terminer la boucle au point où Si() l'instruction est vraie, puis renvoie le résultat.Voici un exemple:
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;
)
);