Lire le contenu d'un fichier texte avec LoadVars
Par -Alexandre LEGOUT aka LAlex- le mardi, février 10 2004, 10:01 - AS2 - Lien permanent
On oublie trés souvent les possibilités étendues de la classe LoadVars, notamment son évenement onData, qui permet d'accéder au contenu brut d'un fichier chargé avec les méthodes load ou sendAndLoad. En effet, le paramètre transmis à cet évenement contient les données brutes du fichier, avant d'être analysées pour générer des propriétés dans l'objet. :o
Dans un cas "classique" d'utilisation de LoadVars, l'évenement onData recevrait donc une chaine de la forme mavar1=mavaleur1&mavar2=mavaleur2 ... mais si le fichier n'est pas formaté de cette manière, il reste tout de même possible d'accéder à son contenu ! ![]()
Ainsi, il est possible de créer un lecteur de fichiers textes, tel que celui présenté ci-contre. Il va lire le contenu du fichier textfile.txt. Bien entendu, pour un affichage correct dans Flash, il faut que le fichier soit encodé en Unicode, afin de préserver les accents et autres fioritures des caractères latins. ![]()
// Si aucun chemin de fichier
// n'est passé en paramètre, on en met
// un par défaut
if (_root.file == undefined) {
_root.file = "textfile.txt";
}
// Objet LoadVars
var lv = new LoadVars();
// Evenement onData
// le paramètre 'src' contient
// le contenu du fichier "loadé"
lv.onData = function (src) {
var nlPos;
// Supprime les retours chariot (
)
// pour ne laisser que les retours à la ligne
while ((nlPos=src.indexOf("
")) >= 0) {
src = src.slice(0, nlPos) + src.slice(nlPos+1);
}
// On met le contenu du fichier dans la
// zone de texte
_root.dspText.text = src;
}
// Chargement du fichier
lv.load(_root.file);
Commentaires
J'adore les loadvars purs !

Je ne comprends plus que les onData et je split les src plus vite mon ombre...
Mais il faut dire que cet évenement n'est pas trop documenté dans le dictionnaire ActionScript :
http://www.macromedia.com/support/flash/action_scripts/actionscript_dictionary/actionscript_dictionary427.html
PS : ça marche aussi pour l'objet XML
PS2 : l'évènement onLoad est ignoré
Oui, si on utilise le onData, et qu'on veut malgré tout parser la chain, il faut appeler explicitement le onLoad :
myLV.onData = function(src) {// action a effectuer
this.onLoad(true);
}
++ ^^
l'ideal est de se faire sa propre class a base de loadVars
//delegation de la methode load de LoadVarsBlahParser.prototype.load = LoadVars.prototype.load;
//comme pour LV on se prevoie une method onLoad
BlahParser.prototype.onLoad = function( /*Boolean*/ success )
{
//a overrider si on veut
}
BlahParser.prototype.onData = function( /*String*/ text )
{
if( text == null )
{
this.onLoad( false );
}
else
{
this.parse( text );
this.loaded = true;
this.onLoad( true );
}
}
//le plus difficile restant la methode parse
BlahParser.prototype.parse = function( /*String*/ text )
{
//bienvenue dans le joyeux monde du parsing
}
mais avec un peu de tehcnique on peut faire pleins de choses
- pre-parser du html pour le rendre compatible flash ou emuler du CSS
- parser des fichier *.ini de config
etc...
(LAlex, copiteur
:D)
Pour info, si on passe par onData et que l'on souhaite quand même parser les infos on peut passer par la méthode caché de LoadVars : decode(). C'est la méthode utilisée en interne par LoadVars pour décoder ce qui est reçu.
myLV.onData = function(src) {this.decode(src);
}
LoadVars peut aussi servir à précharger dans le cache tout type d'objet, on peut charger des swfs, txt, xml, mp3 etc.
Un gros interet de loadVars egalement est de tester si un fichier existe, lancer d'abord un chargement d'un swf via LoadVars et si les données recues par le onData sont undefined alors le fichier n'existe pas dans le cas contraire --> loadMovie qui se fait en plus directement puisque le fichier est dans le cache. Autre gros avantage d'utiliser LoadVars c'est qu'il permet de connaitre la taille exacte d'un swf (meme si il est compréssé) grace à son getBytesTotal() qui va retourner la taille exacte à la difference du getBytesTotal de MovieClip qui retourne la taille décompréssée.
Voilà qui est plutôit futé !
Mais chez Yamago, ils sont futés en général
Oui, ca c'est clair!!!
Je suis en train de coder mon "serveur XML", et en lisant ceci, une idée m'a traversé l'esprit.
Comme vous le savez, il y a aussi une méthode onData pour xmlSocket et on peut, comme Lalex l'a dit plus haut, récupérer le texte brut ... mais pourrait on carrément récupérer autre chose ? Càd un mp3 ? un swf ?
Bien sûr, ce qu'on récupère c'est une chaîne de caractères, mais y aurait il un moyen détourné pour récupérer autre chose ? Je pose naïvement la question ... mais on ne sait jamais, puisqu'il y'a des gens très futés ici !
Cela permettrait d'avoir un serveur streaming pour pas cher ...
Bon ! J'arrête de rêver !
Kib
PS : faut mettre un ascenseur à ta textBox Lalex !
Ca vient, ca vient !!! Avec plein d'autres choses aussi !
Ce serait "envisageable" si Flash etait capable de suaver sur le disque dur, ce qu'il ne sait pas faire autrement que dans l'environnement auteur.
genre: chargement via XmlSocket, sauvegarde sur le disque, rechargement par l'objet qui va bien, Sound pour le son, NetStream pour la video (qui devrait en prime etre du flv).
Pour la video ce ne serait en plus possible que dans Flash 7
Ptite info au passage : http://www.markme.com/cantrell/archives/004055.cfm
vous trouverez à l'adresse citée 2 classes AS2 pour le parsing de fichier de configuration .ini. Et la classe propertyLoader est très facilement adaptable pour de l'AS1.
Super info !!!
Merci titouille ! 
comment faire si la zone de texte cible est dans un movie clip ???
lol .. tu cibles ton clip et ton champ de texte dedans...
Dis moi tu peux pas aller sur un forum comme sur mediabox pour poser ce type de questions ?
comment connaître le nombre de caractère , car en utilisant le .zip, j'ai placé un texte dynamique sur la scéne je lui demande d'afficher la variable val, juste après le code, je fais un val = dspText.length;
val vaut 16 or il y a largement plus de 16 caractères dans le fichier texte présent dans le .zip, il me manque que ça, si je pouvais connaître le nombre de caractère ça serait génial,
si vous avez une piste merci !!
faudrait voir ce que tu fais
Car en général le length fonctionne (texte html ? etc...) hors c'est pas trop le but du blog de lalex de te faire de l'aide pour ce type de question (si je ne me trompe pas :)) .. tu devrais aller sur un forum comme celui de flash forum sur media-box pour poser ta question et avoir des réponses précises 

bye
Et si l'on veut rendre le texte au format HTML avec des liens on procède comment svp ?
Bonjour, j'aimerai remplir dans un tableau le nom des images d'un répertoire donné, le tout en flash.
Je suppose que le script ressemblerai à celui ci dessus pour la lecture d'un fichier texte.
Auriez vous un exemple ?
Merci
bon, je vois que les discussions ont une latence assez grande. Po grav.
J'en profite donc pour poser une autre question :
J'aurai besoin qu'une méthode d'une instance de classe donnée gère toute seule un onEnterFrame.
Mais peut-etre que la classe EventBroadcaster résoud ce type de problème ?
Voilà, bonne continuation, et si vous passez par là, ben , celui qui pose des questions, obtient des réponses :-p
Comme je le précise souvent, cet endroit n'est pas un espace de support ...
Pour répondre à ce type de question, tu peux te rendre sur des forums spécialisés, comme Flash Forum par exemple ...
++ ^^
Hi
Would someone explain in english please.
THanks
Bonsoir
Je suis impressionner par le boulout que tu as fait et surtotu par la scroll bar qu'on modiffier comme on veut ça en jette. MERCI
bonsoir, je bloque sur un pb et je n'arrive pas à trouver une soluce sur les forums: je veux positionner un movieclip sur la scène à partir fichier.txt contenant des variables ? merci si qq peut m'aider
Salut,
Je trouve ton travail vraiement excellent,
Je cherche à faire la meme chose mais en le mettant dans un swf, appeler dans un autre (loadmovie) cible :"fond"par exemple.
Je ne sais pas si je suis très claire mais si quelqun peu m'aider ca serai merveilleux merci et @ bientot
Sank
Fil des commentaires de ce billet