[Tuto] L'utilisation des fichiers ini
Posté : dim. 15 avr. 2012 22:45
Salut tout le monde !
Tout d'abord, ce tutoriel s'adresse aux débutants en AutoIt qui se demandent bien comment se servir d'un fichier .ini, ou d'autres qui se demandent tout simplement ce que c'est et à quoi ça sert. On va donc d'abord définir ce qu'est un fichier .ini.
Il faut savoir que le fichier .ini a une architecture bien a lui :
Nous avons d'abord la section, où l'on peut insérer des clefs pour lesquelles chaque clefs a une valeur donnée. Ce qui nous donne :
Vous allez me dire : "On s'en fiche nous, pour stocker des données, on utilise des variables... T'as pas appris ça ?!"
Bien sûr que si, mais ce genre de fichier va nous donner une certaine liberté. Voici quelques exemples :
Exemple 1 :
Vous êtes sur un programme de chat, le chat est composé d'un ou plusieurs client(s) (les utilisateurs donc) et un serveur, qui se chargera d'envoyer les informations aux différents utilisateurs. Admettons que vous vous êtes préalablement inscrit avec un pseudo, et que pour ne pas vous confondre, le serveur a enregistré votre adresse IP. Vous vous amusez ensuite à flooder votre ami via MP. Bah, le pseudo et l'IP faut les enregistrer, et les variables c'est bien beau mais ça ralentirait beaucoup trop le serveur. Voilà comment monsieur le serveur va procéder :
Client1(vous) >>>envoie le message+IP>>>[Serveur(reçoit l'IP, cherche dans la section "membres" clef "votreIP" et trouve "votre pseudo")]>>>envoie votre message+pseudo>>>Client2(ami) sait dorénavant qui est entrain de l'embêter et qui il va bientôt bloquer...
C'est aussi simple que ça !
Pour l'exemple2, je le donnerai à la fin puisque je vais vous proposer un TP
.
Mais, de quoi a t-on besoin pour faire ce genre de choses ? Nous allons utiliser toutes les commandes que nous offre AutoIt pour la gestion de fichiers .ini.
Commandes :
Sachez que pour placer votre fichier .ini où vous voulez, vous pouvez carrément copier-coller un chemin : $le_nom_du_fichier = "C:\Program Files\monIni.ini" ou bien utiliser les macros : $le_nom_du_fichier = @ProgramFilesDir&"\monIni.ini"
Si vous rentrez toutes les informations, vous supprimerez la clef et sa valeur, si vous mettez juste le fichier et la section, vous supprimerez la section entière !
Cette commande doit être placée dans une variable : $lecture = IniRead(....). Vous lirez la valeur d'une clef demandée qui sera placée dans la variable $lecture, que vous pourrez afficher/modifier etc...
Cette fonction sert à renommer une section, le flag est mit par défaut à 0, ce qui veut dire que si la nouvelle section que vous voulez ajoutée existe, il ne la remplace pas. Par contre si vous le mettez à 1, alors il supprimera les clefs/valeurs de la section.
Cette commande vous permettra d'écrire une section et les clefs + leurs valeurs associées. Vous pouvez en fait écrire plusieurs clefs et valeurs à condition de placer la macro @LF entre chaque ensemble clef/valeur. Si par contre vous voulez écrire les valeurs grâce à un array, je ne préfère pas dire de bêtise car je n'y arrive pas, je laisse donc ceux qui savent, proposer la solution pour que je puisse l'inscrire ici. Pareil pour l'index.
Nous approchons des commandes plus compliquées maintenant, puisqu'elles demandent l'utilisation des tableaux.
Cette commande vous retournera un "array", un tableau en fait, contenant les clefs et leurs valeurs de la section choisie.
Pour cela nous avons besoin de traiter ligne par ligne le fichier à l'aide d'une boucle. Voici un code commenté !
Vous aimez ça ? Allez, dans le même style !!
Cette commande là comme la précédente vous servira à répertorier toutes les sections du ini et vous donner leurs noms.
EDIT : Après avoir vu un message partir à la poubelle, je décide de rajouter la réponse (même si ça coule de source).
Indice :
Bon, allez tenez !
C'était pas dur hein ?
Maintenant que nous avons fini avec toutes ces commandes, je vais vous demander de réaliser cet exemple 2.
Exemple 2 : (cahier des charges)
"Bonjour, je suis directeur d'une maison de refuges pour les animaux de mon village, tout particulièrement de chats et de chiens. J'aimerai que vous me fassiez un programme avec une petite interface graphique, avec lequel je pourrai ajouter ou supprimer un chat ou chien rentrant ou sortant de ma maison. Aussi, j'aimerai avoir un petit bouton pour voir défiler chaque chat ou chien avec son nom et son age. Par contre, puisque je suis maladroit, il m'arrive de me tromper et donc de mal rentrer des informations. Vous veillerez à ce que cela ne perturbe pas mon programme. Je vous remercie !"
A partir du cahier des charges, vous créerez une interface graphique répondant aux besoins de Dédé, vous gérerez aussi un fichier SPA.ini avec l'architecture correcte qui va avec.
Bonne chance !
Si vous êtes là, c'est que :
Bref, la correction et les fichiers qui vont avec sont en ci-joints au tutoriel. J'espère que vous vous utiliserez tout plein de fichiers .ini et à bon escient !!
Tout d'abord, ce tutoriel s'adresse aux débutants en AutoIt qui se demandent bien comment se servir d'un fichier .ini, ou d'autres qui se demandent tout simplement ce que c'est et à quoi ça sert. On va donc d'abord définir ce qu'est un fichier .ini.
En d'autre termes, un fichier .ini est utilisé pour stocker des données.Wikipédia a écrit :En informatique, un fichier INI est un fichier de configuration dans un format de données introduit par les systèmes d'exploitation Windows en 1985. Par convention les noms de ces fichiers portent l'extension « .ini ».
Il faut savoir que le fichier .ini a une architecture bien a lui :
Nous avons d'abord la section, où l'on peut insérer des clefs pour lesquelles chaque clefs a une valeur donnée. Ce qui nous donne :
Code : Tout sélectionner
[Section] ; une section
clef=valeur ; clef avec sa valeur associée
clef2=valeur2 ; seconde clef
[Section2] ; une seconde section
clef3=valeur3 ; etc...
[Section3] ; etc...
clef4=valeur4 ; etc...
Bien sûr que si, mais ce genre de fichier va nous donner une certaine liberté. Voici quelques exemples :
Exemple 1 :
Vous êtes sur un programme de chat, le chat est composé d'un ou plusieurs client(s) (les utilisateurs donc) et un serveur, qui se chargera d'envoyer les informations aux différents utilisateurs. Admettons que vous vous êtes préalablement inscrit avec un pseudo, et que pour ne pas vous confondre, le serveur a enregistré votre adresse IP. Vous vous amusez ensuite à flooder votre ami via MP. Bah, le pseudo et l'IP faut les enregistrer, et les variables c'est bien beau mais ça ralentirait beaucoup trop le serveur. Voilà comment monsieur le serveur va procéder :
Client1(vous) >>>envoie le message+IP>>>[Serveur(reçoit l'IP, cherche dans la section "membres" clef "votreIP" et trouve "votre pseudo")]>>>envoie votre message+pseudo>>>Client2(ami) sait dorénavant qui est entrain de l'embêter et qui il va bientôt bloquer...
C'est aussi simple que ça !
Pour l'exemple2, je le donnerai à la fin puisque je vais vous proposer un TP

Mais, de quoi a t-on besoin pour faire ce genre de choses ? Nous allons utiliser toutes les commandes que nous offre AutoIt pour la gestion de fichiers .ini.
Commandes :
Code : Tout sélectionner
IniWrite("le_nom_de_votre_fichier.ini","la_section","la_clef","sa_valeur")
Code : Tout sélectionner
IniDelete("le_nom_de_votre_fichier.ini","la_section"[,"la_clef")
Code : Tout sélectionner
IniRead("le_nom_du_fichier.ini","la_section","la_clef","default")
Code : Tout sélectionner
IniRenameSection("le_nom_de_votre_fichier.ini","la_section","la_nouvelle_section[,flag)
Code : Tout sélectionner
IniWriteSection("le_nom_de_votre_fichier.ini","la_section","la_clef=sa_valeur"&@LF&"la_clef2=sa_valeur")
Nous approchons des commandes plus compliquées maintenant, puisqu'elles demandent l'utilisation des tableaux.
Code : Tout sélectionner
IniReadSection("le_nom_de_votre_fichier.ini","la_section")
Pour cela nous avons besoin de traiter ligne par ligne le fichier à l'aide d'une boucle. Voici un code commenté !
Code : Tout sélectionner
fichier.ini
[section]
clef=2
clef2=4
Code : Tout sélectionner
$ini = @ScriptDir&"\fichier.ini" ; on place le fichier ini dans une variable pour éviter de le ré-écrire.
$lop = IniReadSection($ini,"section") ; on appelle la commande placée dans une variable
For $i = 1 To $lop[0][0] ; on s'apprête à lire toutes les lignes de la section
MsgBox(0,"lop","clef : "&$lop[$i][0]&" "&"valeur : "&$lop[$i][1]) ; on affiche le nom de la clef et sa valeur pour chaque ligne
Next ; fin de la boucle, il n'y a plus rien dans la section
Code : Tout sélectionner
IniReadSectionNames("le_nom_de_votre_fichier.ini")
Code : Tout sélectionner
fichier.ini
[section]
[mortderire]
[encoreUneSection]
[etUneDePlus]
Code : Tout sélectionner
$ini = @ScriptDir&"\fichier.ini" ; on place le fichier ini dans une variable pour éviter de le ré-écrire.
$lop = IniReadSectionNames($ini) ; On place notre commande dans une variable
For $i = 1 To $lop[0] ;on commence la boucle pour analyser ligne par ligne le fichier
MsgBox(0,"lop",$lop[$i]) ; on affiche le nom de la section pour chaque section
Next
Alors comment on compte le nombre de sections ?! Vous avez une idée ?benhsaien a écrit :Bonjour,
je travaille avec autoit pour l'automatisation des test,ma question est : y'a t'il un moyen pour compter nombre de section d'un fichier .ini
Merci d'avance
Indice :
Code : Tout sélectionner
IniReadSectionNames()
► Afficher le texteSolution

Maintenant que nous avons fini avec toutes ces commandes, je vais vous demander de réaliser cet exemple 2.
Exemple 2 : (cahier des charges)
"Bonjour, je suis directeur d'une maison de refuges pour les animaux de mon village, tout particulièrement de chats et de chiens. J'aimerai que vous me fassiez un programme avec une petite interface graphique, avec lequel je pourrai ajouter ou supprimer un chat ou chien rentrant ou sortant de ma maison. Aussi, j'aimerai avoir un petit bouton pour voir défiler chaque chat ou chien avec son nom et son age. Par contre, puisque je suis maladroit, il m'arrive de me tromper et donc de mal rentrer des informations. Vous veillerez à ce que cela ne perturbe pas mon programme. Je vous remercie !"
A partir du cahier des charges, vous créerez une interface graphique répondant aux besoins de Dédé, vous gérerez aussi un fichier SPA.ini avec l'architecture correcte qui va avec.
Bonne chance !
Si vous êtes là, c'est que :
Code : Tout sélectionner
$Local $est_ici
Switch $est_ici
Case $n_a_pas_compris
MsgBox(16,"NOOOOOON !!","J'espère que ma correction va t'aider !")
Case $veux_corriger
MsgBox(16,"Attention !!" !!","J'espère que tu as juste !")
Endswitch