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

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
Désolé pour ma vaindicavité mais je suis assez cartésien car j'aime la rigueur.

- Si ce n'est pas un défaut, c'est "chiant" dit-on ... je le concède volontier ;((

Je vais tester cette formule pour voir si elle peut s'appliquer à mon dev en cours.
En effet, parfois dans certaines conditions on a des bugs alors qu'un bout de code semble bien fonctionner en isolé.
Pour l'instant je ne lui trouve rien à redire en toute bonne fois.
pegase31 Messages postés 6138 Date d'inscription dimanche 21 décembre 2003 Statut Modérateur Dernière intervention 4 septembre 2013 12
17 juil. 2007 à 13:38
après on dira que je suis mauvaise langue ...
la prochaine fois je ne le ferais pas de tête.

Peg'
cs_Girou Messages postés 1203 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 23 juillet 2009 2
17 juil. 2007 à 13:33
Ben oui...

j'utilise assez souvent ce principe de split / join c'est très pratique :o)
Loubiou Messages postés 150 Date d'inscription mercredi 26 juin 2002 Statut Membre Dernière intervention 5 décembre 2008
17 juil. 2007 à 13:25
Alors je dit BRAVO ! tout ça pour en arriver là ! lol

Ton code fonctionne parfaitement (enfin le code de pegase31 ;-))

la fonction traite bien toutes les occurences similaires dans la phrase et ce pour l'ensemble des mots à décoder !
cs_Girou Messages postés 1203 Date d'inscription lundi 10 mars 2003 Statut Membre Dernière intervention 23 juillet 2009 2
17 juil. 2007 à 11:49
Hello,

je cherche pas a savoir qui a raison, qui a tord...
Mais au probleme posé ci-dessus, a savoir :

Que cette fonction soit bourrine ou hyper hype lol mais qu'elle me donne : a2ty3lm4112ty1

la solution la plus simple et la plus rapide est la suivante :

my_text.text = "aazerty,<lm>,''azerty'";
var Tab_code = new Array ( ["'", "1"],["azer" , "2"],[",<" , "3"],[">," , "4"]);
for (var i=0; i<Tab_code.length; i++) {
my_text.text=my_text.text.split(Tab_code[i][0]).join(Tab_code[i][1]);
}

Le contenu du champs de texte au final est bien égale à :

a2ty3lm4112ty1

taa daaaaaaaaaaaaaaaaaaaaaaaaa
Qu'est ce que j'ai gagné ????

@+
Girou
Loubiou Messages postés 150 Date d'inscription mercredi 26 juin 2002 Statut Membre Dernière intervention 5 décembre 2008
16 juil. 2007 à 21:31
Je pose le problème suivant :
j'ai sur la scène la phrase suivante (DANS UN CHAMP TEXTE):

my_text.text = "aazerty,<lm>,''azerty'";

Je veux écrire une fonction qui me décode :
' en 1
azer en 2
,< en 3
>, en 4

Que cette fonction soit bourrine ou hyper hype lol mais qu'elle me donne : a2ty3lm4112ty1

Le problème est posé et je propose une ébauche de solution.
Loubiou Messages postés 150 Date d'inscription mercredi 26 juin 2002 Statut Membre Dernière intervention 5 décembre 2008
16 juil. 2007 à 21:23
Bon je ne veux pas polémiquer avec toi mais encore une fois tu ne prends pas le temps de l'analyse.
Le dev est avant tout un état d'esprit et poser un problème c'est mettre en évidence sa solution (n'est-il pas ?).
En effet, mon code, comme son titre l'indique, propose de décoder des mots html dans une phrase et pas d'autres. Rien à voir avec un pb quelconque de décodage html. Je maîtrise parfaitement les TextField ! Si j'ai un problème, j'utilise le forum prévu à cet effet.
J'ai dernièrement écrit une fonction flash qui décode les caractères cyrilliques pour les afficher dans une page de code FR. Le cyrillique à bien plus de caractères que le Français ! Je penserais à la mettre en ligne si l'on me demande. Elle peut s'appliquer pour le chinois ou thaï.
Tu vois, je suis en train de développer une admin de news FLASH formaté en HTML donc j'ai besoin de voir certain codes mais pas d'autres afin de pouvoir les gérer. Comme je suis obligé de travailler dans des n'uds pour des raisons X j'ai parfois certain caractères en HTML indésirables alors que si je pouvais utiliser des attributs, mon XML serait lu plus vite et mieux décodé. Mais là n'est pas le propos ! C'est une question de cahier des charges dont je ne suis pas l'auteur. (cf mon post sur le chargement de 2000 données en moins d'une seconde et la théorie des attributs expliquée par PhilFlash sur son merveilleux site.
Je te remercie pour la commande que je connais depuis flash4 mais mes XML sont formatés en UTF8 et j'utilise des fichiers CSS avec des styleSheet.
Je ne veux pas rentrer en conflit avec toi, juste te dire que ma méthode « bourrine » est fonctionnelle et permet de décoder tous les mots (répétitifs ou pas dans une phrase) alors que la tienne ne fonctionne que sur des chaines et pas sur des textfield et qu'elle ne décode pas toutes les même occurrences d'une même phrase. C'est pour moi un incohérence.
Il n'y a pas de formule miracle qui travaille directement sur un champ texte en recherchant tous les mots et tous les doublons dans une même phrase en une ligne de code !
J'aurais pu prendre l'exemple d'un traducteur (arf) car il arrive dans une phrase que plusieurs mots soient répétés.
Maintenant je ne cherche pas à montrer que mon code est le meilleur, car on peut toujours optimiser. Mon but est de faire partager. Concernant les temps machines, je peut te les calculer tu serait très surpris !! Maîtrises-tu l'assembleur ?
Si tu proposes mieux avec la même fonctionnalité, je serais très intéressé de l'étudier et t?en remercie par avance.
Franchement, tes nerfs passés, prends le temps de comprendre mon propos, d'analyser la problématique d'après mon code que tu lis parfaitement si tu le veux, et essayons d'en sortir du concret. Tout le monde peut se tromper (moi compris) dans une société ou nous sommes habitués à traiter les effets sans analyser les causes !
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 à 20:03
ah si, une dernière chose : si tu n'arrives pas à avoir du code correctement formaté sous Flash c'est que te transferts sont foireux et que tu devrais commencer par là ... coder tes xmlen utf8, par exemple ou voir à arranger tes PHP .. et si même avec ça t'arrives à rien, exxaue cette simple ligne de code :

System.useCodepage = true;

Et même si avec tout ça ça ne marche pas, pense à la corde ..

Peg'
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 à 19:54
je t'ai juste fait ça de tête, sans tester ... juste pour te dire que ta méthode est plutôt bourrine et demande énormément de cycles CPU ... après tu as le droit d'être butté et de croire que ton code est le meilleur, c'est ton droit le plus stricte. Mais si tu ne veux pas de critiques, ne postes pas ton code ici ..

Sur ce, je me lave les mains de toi et de tes assurances. Je ne t'aiderais plus à évoluer.

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 à 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 ... !
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
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'
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
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'
Rejoignez-nous