/*|———————————————————————————————————————————————————————————————————————————————— | _______________ ____________________________ ___________ | | FichierIni.js | | © marcel.Bultez@Tiscali.fr | | Août 2005 | | ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ ¯¯¯¯¯¯¯¯¯¯¯ | ___________________________ | | Gestion des Fichiers .INI | | ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ | _____________________________ | | structure d'un fichier .ini | | ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ | [nom de la section] | nom de la clé = valeur de la clé | _____________ | | utilisation | | ¯¯¯¯¯¯¯¯¯¯¯¯¯ | • | entre et | ___________________________________________________ | • | déclaration du fichier et du type des traitements | | ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ | entre et | | var fi=new FichierIni ( | fichier ini, chemin et nom du fichier .ini | facultatif | par défaut : "nom de la page htm/hta".ini | distinguer les Majuscules des minuscules, | facultatif | true respecter la "case" | par défaut, false : ignorer la "case" | sauver, facultatif | par défaut, true : sauver le fichier | après toute modification | false, le fichier devra être sauvé | explicitement par FichierIni.Sauver() | fso facultatif, l'Active'X FileSystemObject | nom de l'objet s'il existe déjà | par défaut appelé en interne | ); | _______________________ | • | fonctions disponibles | retour=fi.fonction ( paramètres ) | ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ | Sauver() sauvegarde le fichier.ini | ¯¯¯¯¯¯ peut être "automatique" | cleLire(section,clé) lire un clé | ¯¯¯¯¯¯¯ en retourne la valeur ou false | cleCreer(section,si section n'existe pas, | ¯¯¯¯¯¯¯¯ clé,si clé existe,valeur) | créer la clé dans la section avec valeur | si section n'existe pas : true => la créer | si clé existe : true => la remplacer | retourne true ou false | cleSupprimer(section,clé) | ¯¯¯¯¯¯¯¯¯¯¯¯ supprime la clé dans la section | retourne false si elle n'existe pas, | true sinon | cleModifier(section,clé,valeur) | ¯¯¯¯¯¯¯¯¯¯¯ modifie la valeur de la clé dans la section | retourne false si elle n'existe pas, | true sinon | sectionCreer(section) crée une nouvelle section | ¯¯¯¯¯¯¯¯¯¯¯¯ | sectionSupprimer(section,non vide) | ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ supprime une section et toutes ses clés | si non vide = true, sinon il ne doit | plus y avoir de clés. | |————————————————————————————————————————————————————————————————————————————————*/ //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ function FichierIni (nomIni,respectMajMin,sauver,fso) //~~ Gestion Fichiers Ini ~~ //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { this.fso = fso ? fso : new ActiveXObject("Scripting.FileSystemObject"); // File System Object par défaut this.nomIni = nomIni ? nomIni : false; // nom fichier.ini if ( !this.nomIni ) { // par défaut : var url=unescape(self.location.pathname); // nom de la page var adr=(this.fso.GetExtensionName(url).toLowerCase()!='hta')?1:0; // hta ou pas ? var dir=this.fso.GetParentFolderName(url).substr(adr); // car le nom commence en 0 ou en 1 this.nomIni=dir + "\\" + this.fso.GetBaseName(url) + ".ini"; // répertoire + nom de la page + .ini } this.respectMajMin = respectMajMin ? respectMajMin : true; // par défaut, respecter les Majuscules/minuscules this.sauver = sauver ? sauver : true; // par défaut, sauver à chaque modification this.tableau=new Array(); // stockage intermédiaire des sections et des clés var a; if (this.fso.FileExists(this.nomIni)) { // le fichier .ini existe var ts=this.fso.OpenTextFile(this.nomIni,1,false); // l'ouvrir var lu,section,tmp; while (!ts.AtEndOfStream) { // tant que la fin de fichier n'est pas détectée lu=ts.ReadLine(); // lire un enrgt if (lu.length>0) { // s'il est d'une taille > 0 switch ( lu.charAt(0) ) { // type d'enrgt ? case "[": //—— une section : [nom] —— //————————————————————————————————————— //~ a=lu.indexOf("]"); // ] existe ? if ( a>1 ) { // [nom] correct if ( !this.respectMajMin ) lu=lu.toUpperCase(); // transformer en majuscules s'il ne faut pas respecter la case section=lu.substring(1,a); // extraire le nom this.tableau[section]=new Array(); // créer la section } break; default: //—— une clé : clé=valeur —— //————————————————————————————————————— tmp=lu.split("="); // éclater enrgt => Array , séparateur = if ( tmp.length>=1 ) { // clé=valeur correct if ( !this.respectMajMin ) tmp[0]=tmp[0].toUpperCase(); // transformer en majuscules s'il ne faut pas respecter la case this.tableau[section][tmp[0]]=tmp[1]; // noter la valeur de cette clé } break; } } } ts.close(); // fermer le fichier } } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ function FichierIni.prototype.Sauver () //~~ Sauver le .ini ~~ //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { var ts=this.fso.OpenTextFile(this.nomIni,2,true); // ouvrir le fichier en écriture, le créer si nécessaire for ( var a in this.tableau ) { // pour toutes les sections ts.WriteLine("["+a+"]"); for ( var b in this.tableau[a] ) { // pour toutes les clés de cette section ts.WriteLine(b+"="+this.tableau[a][b]); } } ts.close(); return true; } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ function FichierIni.prototype.sectionCreer (section) //~~ créer une section ~~ //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { if (!this.respectMajMin) { // non respect case section=section.toUpperCase(); // section en majuscules } if ( this.tableau[section] ) { // la section existe return false; } else { // la section n'existe pas this.tableau[section]=new Array(); // créer la section if ( this.sauver ) this.Sauver(); // sauver si demandé return true; } } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ function FichierIni.prototype.sectionSupprimer (section,siCle) //~~ supprimer une section ~~ //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { if (!this.respectMajMin) { // non respect case section=section.toUpperCase(); // section en majuscules } if ( !this.tableau[section] ) { // la section n'existe pas return false; } else { // la section existe if ( !siCle ) { // détruire une section non vide non autorisé for ( var a in this.tableau[section] ) { // est-elle vide ? return false; // non } } var tmp=new Array(); for ( a in this.tableau ) { // pour toutes les sections if ( section!=a ) { // sauf pour celle à supprimer tmp[a]=new Array(); // mémoriser la section for ( var b in this.tableau[a] ) { // pour toutes les clés tmp[a][b]=this.tableau[a][b] // les mémoriser } } } this.tableau=tmp; // nouveau tableau ( sans la section supprimée ) if ( this.sauver ) this.Sauver(); // sauver si demandé return true; } } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ function FichierIni.prototype.cleLire (section,cle) //~~ délivre la valeur d'une clé ~~ //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { if ( !this.respectMajMin ) { // non respect case section=section.toUpperCase(); // section en majuscules cle=cle.toUpperCase(); // clé en majuscules } try { var s=this.tableau[section][cle]; } catch(erreur) { // la clé n'existe pas return false; } return this.tableau[section][cle]; } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ function FichierIni.prototype.cleCreer (section,sectionCreer,cle,cleRemplacer,valeur) //~~ créer une clé ~~ //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { if ( valeur=="" ) return false; if (!this.respectMajMin) { // non respect case section=section.toUpperCase(); // section en majuscules cle=cle.toUpperCase(); // clé en majuscules } sectionCreer = sectionCreer ? sectionCreer : false; // par défaut : ne pas créer la section cleRemplacer = cleRemplacer ? cleRemplacer : false; // par défaut : ne pas remplacer la clé var c,s; // section & clé existent ou pas ? if (this.tableau[section]) { // la section existe s=this.tableau[section]; } else { // la section n'existe pas s=false; } try { // la clé existe ? c=this.tableau[section][cle]; } catch(erreur) { // la clé n'existe pas c=false; } if ( !s && !sectionCreer ) return false; // la section n'existe pas et il ne faut pas la créer if ( c && !cleRemplacer ) return false; // la clé existe et il ne faut pas la remplacer if ( !s ) this.tableau[section]=new Array(); // créer la section si nécessaire this.tableau[section][cle]=valeur; // donner une valeur à la clé if ( this.sauver ) this.Sauver(); // sauver si demandé return true; } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ function FichierIni.prototype.cleSupprimer (section,cle) //~~ supprimer une clé ~~ //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { if (!this.respectMajMin) { // non respect case section=section.toUpperCase(); // section en majuscules cle=cle.toUpperCase(); // clé en majuscules } try { // la clé existe ? var s=this.tableau[section][cle]; } catch(erreur) { // non return false; } var tmp=new Array(); // zone de travail for ( var a in this.tableau[section] ) { // pour toutes les clés if ( a != cle ) { // sauf celle à supprimer tmp[a]=this.tableau[section][a]; // conserver } } this.tableau[section]=tmp; // nouvelles clés if ( this.sauver ) this.Sauver(); // sauver si demandé return true; } //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ function FichierIni.prototype.cleModifier (section,cle,valeur) //~~ modifier une clé ~~ //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ { if ( valeur=="" ) return false; if (!this.respectMajMin) { // non respect case section=section.toUpperCase(); // section en majuscules cle=cle.toUpperCase(); // clé en majuscules } try { // la clé existe ? var s=this.tableau[section][cle] } catch(erreur) { // la clé n'existe pas return false; } // la clé existe this.tableau[section][cle]=valeur; // modifier la valeur if ( this.sauver ) this.Sauver(); // sauver si demandé return true; } /*——————————————————————————————————————————————————————————————————————*/