Parser un fichier texte pour en extraire des variables

Soyez le premier à donner votre avis sur cette source.

Vue 10 886 fois - Téléchargée 464 fois

Description

De quoi s?agit-il ?
D?une classe permettant de charger dynamiquement des variables ou constantes (bien que l?AS2 n?ait pas vraiment de constantes?) contenu dans un fichier texte et d?y accéder facilement via un appel à la classe AppliConfig.

Comment accéder aux valeurs chargées dynamiquement:
// Recherche d?une valeur
trace(AppliConfig.MY_STRING)
If(AppliConfig.MY_BOOLEAN1){
trace('La valeur de MY_BOOLEAN est true')
}
//Comme la classe est dynamique, l?assignation de nouvelles variables globales n?est pas un problème.
AppliConfig.UNE_NOUVELLE_VARIABLE="une valeur définie lors de l?exécution"
trace(AppliConfig.UNE_NOUVELLE_VARIABLE)

Comment structurer le fichier de configuration :
Comme la plupart des fichiers .ini (Voir le fichier exemple dans le zip)

; Fichier de configuration
[COULEURS]
COULEUR_BASE :0xff0000
COULEUR_ACTIVE :0xfffffff
[CLIP PERSO]
CLIP_PARAMS :{_x :100,_y :100,_alpha :50}

Quels sont les avantages de ce système ?
Il fonctionne aussi bien en ligne que hors ligne (en test direct sur votre ordinateur).
Il rassemble en un point central les données globales de votre application/animation, structuré d?une façon très simple à comprendre et à modifier
Il s?occupe seul de déterminer le type des variables créées
Il permet la création très simple d?objets compliqués
MON_ARRAY :["Une chaine de caractères",{_x :100,_y :100,_alpha :50},[1,2,3, 4]]
va créer un tableau accessible via AppliConfig.MON_ARRAY qui contiendra 3 lignes :
? AppliConfig.MON_ARRAY [0] : Une chaine de caractères
? AppliConfig.MON_ARRAY [1] : Un objet avec 3 pairs de clé/valeur
? AppliConfig.MON_ARRAY [2] : Un tableau de 4 lignes contenant chacune un nombre
Chaque élément du tableau pouvant être directement appelé via AppliConfig.MON_ARRAY[n]

Pourquoi ne pas stocker en dur les variables dans le script ?

Pour éviter de devoir recompiler à chaque fois l?application pour tester une nouvelle valeur, ce qui peut représenter un gain de temps pour les grosses applications.
Pour permettre la personnalisation rapide d?application (ou de portion d?application) sans devoir adapter le swf de base pour chaque cas.

Mais encore?

Imaginez que votre fichier de configuration est généré automatiquement via un script (php,asp,?) en fonction d?une base de données ou autre? ou selon un login/password
L?animation ou l?application sera personnalisée en fonction de l?utilisateur, en fonction d?une date,? enfin, tout ce qu?on peut imaginer.

Et les inconvénients ?

Cette méthode de travail n?est pas utile pour de petites animations ou application, elle va alourdir le travail de base (attente du chargement et de l?instanciation des variables, écouteur sur la classe AppliConfig)?
Cette méthode demande une plus grande préparation du travail, bien structurer ses applications, agir en fonction des variables, ce qui peut allonger le code?
Si vous définissez des variables static dans vos classes faisant référence aux valeurs contenues dans le fichier de configuration ces valeurs ne seront pas remplies

maClass{
static var COULEURCLIP=AppliConfig.COULEUR_BASE
trace(COULEURCLIP) // retournera undefined

Mais cela est simplement contournable en réalisant une classe qui étend AppliConfig et qui va placer les valeurs static une fois les données chargées.

import net.graphit.Config.AppliConfig;
dynamic class MyAppliConfig extends AppliConfig
{
private static var _registred:Boolean=AppliConfig.register(MyAppliConfig )
private function MyAppliConfig (){}

private static function onReady()
{
// Assignation des valeurs statiques
MA_CLASSE.COULEURCLIP=MyAppliConfig.COULEUR_BASE
// event dispatch pour prévenir l'application qu'on est prêt pour la suite
dispatchEvent({
type:"ConfigReady",
target:ConsoleConfig
});
}
}
N?hésitez pas à allonger la liste !!!

Source / Exemple :


// Voir classe dans le zip
// Utilisation :
import net.graphit.Config.AppliConfig

var _listener:Object=new Object()
_listener.ConfigReady=function(){
	trace('Event Received')
        // Suite de l'application
}
AppliConfig.addEventListener('ConfigReady',_listener)
AppliConfig.load('ConfigFile.ini')
stop()

Conclusion :


Classe compatible avec MTASC et pour ceux qui utilisent flashdevelop voici comment utiliser cette classe
dans votre classe toujourscompilée et ayany un point d'entrée (main)

class Application
{
function Application(){}
static function main(_mc:MovieClip)
{
// Loading configuration Datas
AppliConfig.addEventListener('ConfigReady', mx.utils.Delegate.create(Application, ConfigReady));
AppliConfig.load('MyConfigFile.ini');
}

private static function ConfigReady()
{
trace('CONFIG IS READY, starting Application');
// suite de l'application
}
}

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

Messages postés
1204
Date d'inscription
lundi 10 mars 2003
Statut
Membre
Dernière intervention
23 juillet 2009
2
Hello !

@BANANATREE & TOP30 :
Je sais bien que les constantes n'existent pas en AS2 -> voir la première phrase:
(bien que l’AS2 n’ait pas vraiment de constantes…)

@TOP30 : Pourquoi pas un XML :
- le fichier txt (ou ini dans mon cas) est plus leger (mais bon entre 1 ou 2 Ko la différence au chargement c'est pas énorme !!!)
- En passant par le XML on doit tout de même faire un parsing pour déterminer le typage des variables à instancier, le XML ne retourne que des valeurs de type String() si je ne souviens bien.
- J'ai fais ce choix surtout pour les 'mises à jour' online des valeurs
Un champ de texte éditable sur la scene qui charge et affiche le fichier .ini
On modifie simplement le contenu du champs de texte, on ajoute des sections, des commentaires, des VARIABLES (hé hé, ne buttons pas 2 fois sur la même pierre) dans un environement texte très simple.
Un bouton 'save changes' qui envoi le contenu du champ de texte à un miniuscule script php qui réecrit le fichier .ini et on le tour est joué.

En passant par XML on se farci les appendchilds, nodeValue, XPAth ou XPathAPI pour rechercher les valeurs, des [CDATA[ pour les commentaires et gare au accents... Bref la manipulation et la mise à jour est nettement plus lourde.

@+
Girou
Messages postés
1158
Date d'inscription
vendredi 21 février 2003
Statut
Membre
Dernière intervention
6 août 2010

Oui mal expliqué :
Car en AS2 les "constantes" n'existent pas !
Se sont les variables statiques qui le sont considérées comme telle.
Etant des variables, elle peuvent être "settée".
Hors en AS3 les constantes de compilation existent. Et comme leurs noms l'indique
une fois compilée, elles sont inchangeable.
Exemple : Math.PI, qu'elle est l'interêt de changer sa valeur ???

Donc ne pas confondre variable de classe et constante.

Ceci dit tu devrais penser à l'XML !
Messages postés
1204
Date d'inscription
lundi 10 mars 2003
Statut
Membre
Dernière intervention
23 juillet 2009
2
Oui, je sais, ca parrait absurde comme cela !!!

J'utilise ceci pour parametrer la même application pour différents clients sans avoir à recompiler systématiquement l'application pour chaque client avec ses options à lui

Je me suis sans doute mal exprimé !
Messages postés
337
Date d'inscription
vendredi 15 octobre 2004
Statut
Membre
Dernière intervention
2 novembre 2010

"charger dynamiquement des constantes" ?
...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.