DÉCODER DES CODES HTML PARMIS D'AUTRES ! (AS2)

pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 - 15 juil. 2007 à 11:10
Loubiou Messages postés 150 Date d'inscription mercredi 26 juin 2002 Statut Membre Dernière intervention 5 décembre 2008 - 17 juil. 2007 à 22:11
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/43463-decoder-des-codes-html-parmis-d-autres-as2

pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
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és 150 Date d'inscription mercredi 26 juin 2002 Statut Membre Derniè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és 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
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és 759 Date d'inscription mercredi 11 décembre 2002 Statut Membre Dernière intervention 12 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és 150 Date d'inscription mercredi 26 juin 2002 Statut Membre Derniè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 :

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 ... !