pegase31
Messages postés6138Date d'inscriptiondimanche 21 décembre 2003StatutModérateurDernière intervention 4 septembre 201312 15 juil. 2007 à 11:10
une petite astuce qui a déjà été donnée ici pour remplacer une chaîne dans un string (ici myText) et qui tient en une seule ligne :
myText.split("chaîne à remplacer").joint("chaîne de remplacement");
Peg'
Loubiou
Messages postés150Date d'inscriptionmercredi 26 juin 2002StatutMembreDernière intervention 5 décembre 2008 16 juil. 2007 à 01:52
Ok bien, mais bon, "chaine.replaceText(pos_deb, pos_deb+len_masq, replace);" ça fait une ligne aussi non ?
Notons que j'utilise une seule commande flash "REPLACETEXT" au lieu de "SPLIT" et "JOIN" pour votre ligne de code qui oblige plus de cycle machine je pense.
Bref, c'est preque la même chose mais pas tout à fait ;-))
pegase31
Messages postés6138Date d'inscriptiondimanche 21 décembre 2003StatutModérateurDernière intervention 4 septembre 201312 16 juil. 2007 à 12:37
sauf que ma méthode remplace tout les textes dans la lignes d'une seule façon sans paramétres à ajouter, no index à trouver auparavant.
Tu places ce bout de code dans un for en ayant inscrit ton tableau avant et pas besoin de While, ni de toute la tonne de code avant.
Ce qui donnerait :
# //Tableau contenant le code à rechercher et celui qui sera son remplaçant.
# var Tab_code = new Array ( ["'", "'"],
# ["&" , "&"],
# [",<" , "<"],
# [">," , ">"]
# );
# for (var i=0; i<Tab_code.length; i++) {
# myText.split(Tab_code[i][0]).join(Tab_code[i][1]);
# }
voili, rien de plus simple ! Et sèrieusement c'est pas du tout pareil ...
Peg'
shubenka
Messages postés759Date d'inscriptionmercredi 11 décembre 2002StatutMembreDernière intervention12 novembre 2008 16 juil. 2007 à 15:52
Pour améliorer la méthode il faudrais ne faire qu'un parcours du texte pour toutes les règles de remplacement. Contrairement à N parcours de texte pour N règles. Je dit pas que cela serais facile à faire mais ça serais mieux :p
Loubiou
Messages postés150Date d'inscriptionmercredi 26 juin 2002StatutMembreDernière intervention 5 décembre 2008 16 juil. 2007 à 19:36
Je viens de tester ton code : je ne l'avait pas fait avant faisant confiance !
Le résultat est flagrant !
- En effet, j'ai le regret de t'informer que ton code ne décode qu'une seule occurence de la phrase à tester (après modifs puisqu'il ne peut que travailler sur des chaînes et non sur directement sur un champ texte comme le mien).
Mon code recherche dans la phrase toutes les occurences et les remplacent à la volée puis refait cette opération pour tous les mots à chercher dans la phrase. D'où le WHILE (pour toute la phrase) et le FOR pour tous les mots à chercher.
En conclusion, je pense qu'avant de parler, il faut analyser la problèmatique et ensuite étudier le code donné en réponse. (je l'applique à moi-même !). Je pensais que mon code était assez explicite ! cela prouve qu'il faut que je donne plus de commentaires à mes codes à l'avenir (même en classe expert). Mon prof me disait que les maths, ce n'était pas de la cuisine (lol).
Pour démonstration j'ai comparé nos 2 codes:
Nb: ton code ne décode rien tel qu'il est, (tu ne l'a pas testé je pense !).
Il faut passer par un chaine pour qu'il fonctionne.
//-----------------------------------------------------------------------
// Ton code :
// phrase de départ à décoder :
myText.text ="aazerty,<lm>,''azerty'";
chaine = myText.text;
trace(chaine);
//Tableau contenant le code à rechercher et celui qui sera son remplaçant.
var Tab_code = new Array ( ["'", "1"],
["azer" , "2"],
[",<", "3"],
[">," , "4"]
);
for (var i=0; i<Tab_code.length; i++) {
//ma ligne de code proposée par pegase31 :
chaine2 = chaine.split(Tab_code[i][0]).join(Tab_code[i][1]);
}
trace(chaine2);
// résultat : 1 seul mot décodé (>,) !!!!!!
//donne : aazerty,<lm4''azerty'
this.createTextField("my_text", this.getNextHighestDepth(), 8, 150, 320, 22);
my_text.autoSize = true;
// phrase de départ à décoder :
my_text.text = "aazerty,<lm>,''azerty'";
Decode_carrets(my_text);
//------------------------------------------------------------------------------------
function Decode_carrets(champ_texte){
//Tableau contenant le code à rechercher et celui qui sera son remplaçant.
var Tab_codes = new Array ( ["'", "1"],
["azer" , "2"],
[",<", "3"],
[">," , "4"]
);
for(i=0; i<Tab_codes.length; i++){//recherche avec tous les codes un par un
var masq : String = new String(Tab_codes[i][0]);
var replace : String = new String(Tab_codes[i][1]);
var len_masq : Number = Tab_codes[i][0].length;
var pos_deb : Number = champ_texte.text.indexOf(masq);
while (pos_deb >-1){ //recherche du même code sur la ligne entière
champ_texte.replaceText(pos_deb, pos_deb+len_masq, replace);
var pos_deb : Number = champ_texte.text.indexOf(masq);
}//while
}//for
// Résultat tout a été décodé :
//donne : a2ty3lm4112ty1
}
//------------------------------------------------------------------------------------
15 juil. 2007 à 11:10
myText.split("chaîne à remplacer").joint("chaîne de remplacement");
Peg'
16 juil. 2007 à 01:52
Notons que j'utilise une seule commande flash "REPLACETEXT" au lieu de "SPLIT" et "JOIN" pour votre ligne de code qui oblige plus de cycle machine je pense.
Bref, c'est preque la même chose mais pas tout à fait ;-))
16 juil. 2007 à 12:37
Tu places ce bout de code dans un for en ayant inscrit ton tableau avant et pas besoin de While, ni de toute la tonne de code avant.
Ce qui donnerait :
# //Tableau contenant le code à rechercher et celui qui sera son remplaçant.
# var Tab_code = new Array ( ["'", "'"],
# ["&" , "&"],
# [",<" , "<"],
# [">," , ">"]
# );
# for (var i=0; i<Tab_code.length; i++) {
# myText.split(Tab_code[i][0]).join(Tab_code[i][1]);
# }
voili, rien de plus simple ! Et sèrieusement c'est pas du tout pareil ...
Peg'
16 juil. 2007 à 15:52
16 juil. 2007 à 19:36
Le résultat est flagrant !
- En effet, j'ai le regret de t'informer que ton code ne décode qu'une seule occurence de la phrase à tester (après modifs puisqu'il ne peut que travailler sur des chaînes et non sur directement sur un champ texte comme le mien).
Mon code recherche dans la phrase toutes les occurences et les remplacent à la volée puis refait cette opération pour tous les mots à chercher dans la phrase. D'où le WHILE (pour toute la phrase) et le FOR pour tous les mots à chercher.
En conclusion, je pense qu'avant de parler, il faut analyser la problèmatique et ensuite étudier le code donné en réponse. (je l'applique à moi-même !). Je pensais que mon code était assez explicite ! cela prouve qu'il faut que je donne plus de commentaires à mes codes à l'avenir (même en classe expert). Mon prof me disait que les maths, ce n'était pas de la cuisine (lol).
Pour démonstration j'ai comparé nos 2 codes:
Nb: ton code ne décode rien tel qu'il est, (tu ne l'a pas testé je pense !).
Il faut passer par un chaine pour qu'il fonctionne.
//-----------------------------------------------------------------------
// Ton code :
this.createTextField("myText", this.getNextHighestDepth(), 8, 150, 320, 22);
myText.autoSize = true;
//myText.text = "'|à|'|â|'|?|, machin ,|%|&|";
// phrase de départ à décoder :
myText.text ="aazerty,<lm>,''azerty'";
chaine = myText.text;
trace(chaine);
//Tableau contenant le code à rechercher et celui qui sera son remplaçant.
var Tab_code = new Array ( ["'", "1"],
["azer" , "2"],
[",<", "3"],
[">," , "4"]
);
for (var i=0; i<Tab_code.length; i++) {
//ma ligne de code proposée par pegase31 :
chaine2 = chaine.split(Tab_code[i][0]).join(Tab_code[i][1]);
}
trace(chaine2);
// résultat : 1 seul mot décodé (>,) !!!!!!
//donne : aazerty,<lm4''azerty'
//---------------------------------------------------------------
// mon code :
this.createTextField("my_text", this.getNextHighestDepth(), 8, 150, 320, 22);
my_text.autoSize = true;
// phrase de départ à décoder :
my_text.text = "aazerty,<lm>,''azerty'";
Decode_carrets(my_text);
//------------------------------------------------------------------------------------
function Decode_carrets(champ_texte){
//Tableau contenant le code à rechercher et celui qui sera son remplaçant.
var Tab_codes = new Array ( ["'", "1"],
["azer" , "2"],
[",<", "3"],
[">," , "4"]
);
for(i=0; i<Tab_codes.length; i++){//recherche avec tous les codes un par un
var masq : String = new String(Tab_codes[i][0]);
var replace : String = new String(Tab_codes[i][1]);
var len_masq : Number = Tab_codes[i][0].length;
var pos_deb : Number = champ_texte.text.indexOf(masq);
while (pos_deb >-1){ //recherche du même code sur la ligne entière
champ_texte.replaceText(pos_deb, pos_deb+len_masq, replace);
var pos_deb : Number = champ_texte.text.indexOf(masq);
}//while
}//for
// Résultat tout a été décodé :
//donne : a2ty3lm4112ty1
}
//------------------------------------------------------------------------------------
En conclusion, rien n'est acquis en prog ... !