[Tuto] L'utilisation des fichiers ini

Espace contenant des tutoriels divers concernant AutoIt.
Règles du forum
.

Tutoriel "La programmation avec Autoit" : https://openclassrooms.com/fr/courses/1 ... vec-autoit
Avatar du membre
blacksoul305
Membre émérite
Membre émérite
Messages : 957
Enregistré le : ven. 18 mars 2011 11:49
Localisation : Au pays des programmeurs.
Status : Hors ligne

[Tuto] L'utilisation des fichiers ini

#1

Message par blacksoul305 »

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.
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 ».
En d'autre termes, un fichier .ini est utilisé pour stocker des données.

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...
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 :twisted: .

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")
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"

Code : Tout sélectionner

IniDelete("le_nom_de_votre_fichier.ini","la_section"[,"la_clef")
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 !

Code : Tout sélectionner

IniRead("le_nom_du_fichier.ini","la_section","la_clef","default")
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...

Code : Tout sélectionner

IniRenameSection("le_nom_de_votre_fichier.ini","la_section","la_nouvelle_section[,flag)
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.

Code : Tout sélectionner

IniWriteSection("le_nom_de_votre_fichier.ini","la_section","la_clef=sa_valeur"&@LF&"la_clef2=sa_valeur")
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.

Code : Tout sélectionner

IniReadSection("le_nom_de_votre_fichier.ini","la_section")
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é !

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
Vous aimez ça ? Allez, dans le même style !!

Code : Tout sélectionner

IniReadSectionNames("le_nom_de_votre_fichier.ini")
Cette commande là comme la précédente vous servira à répertorier toutes les sections du ini et vous donner leurs noms.

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
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).
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
Alors comment on compte le nombre de sections ?! Vous avez une idée ?

Indice :

Code : Tout sélectionner

IniReadSectionNames()
Bon, allez tenez !
► Afficher le texteSolution
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 :

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
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 !!
Fichiers joints
Dédé manager.rar
Cette archive contient le fichier.ini + la fenêtre Koda + le corrigé commenté
(3.08 Kio) Téléchargé 930 fois
Modifié en dernier par blacksoul305 le lun. 16 avr. 2012 10:38, modifié 1 fois.
Étudiant en 2ème année de Licence Informatique.
Avatar du membre
Iste
Niveau 11
Niveau 11
Messages : 1870
Enregistré le : jeu. 04 déc. 2008 14:21
Localisation : 76
Status : Hors ligne

Re: [Tuto] L'utilisation des fichiers ini

#2

Message par Iste »

Beaucoup d’imprécision dans le texte, mais dans l'ensemble ça devrait répondre aux questions qu'on beaucoup de débutants avec les .ini
Signez ici
Avatar du membre
blacksoul305
Membre émérite
Membre émérite
Messages : 957
Enregistré le : ven. 18 mars 2011 11:49
Localisation : Au pays des programmeurs.
Status : Hors ligne

Re: [Tuto] L'utilisation des fichiers ini

#3

Message par blacksoul305 »

Bonjour Iste,
Iste a écrit :Beaucoup d’imprécision dans le texte
C'est vrai que je m'en doutais un peu, surtout dans les commentaires de certaines commandes, mais par peur de mettre une bêtise, je préfère que ceux qui sont sures, proposent leurs remarques pour que je puisse les inscrire.
Iste a écrit :mais dans l'ensemble ça devrait répondre aux questions qu'on beaucoup de débutants avec les .ini
Ça va, ça a l'air d'être positif ! C'était le but du tutoriel en même temps !

Merci !
Étudiant en 2ème année de Licence Informatique.
kiicri
Niveau 1
Niveau 1
Messages : 1
Enregistré le : sam. 21 juil. 2012 08:00
Status : Hors ligne

Re: [Tuto] L'utilisation des fichiers ini

#4

Message par kiicri »

Merci pour ce tuto.
Débutant débutant, il me sera d'une grande utilité :) .
Kii
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [Tuto] L'utilisation des fichiers ini

#5

Message par mikell »

Sympa tuto
Tiens une petite fonction d'affichage de ini (pratique pour faire une listview) :wink:
► Afficher le texte
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
blacksoul305
Membre émérite
Membre émérite
Messages : 957
Enregistré le : ven. 18 mars 2011 11:49
Localisation : Au pays des programmeurs.
Status : Hors ligne

Re: [Tuto] L'utilisation des fichiers ini

#6

Message par blacksoul305 »

kiicri et mikell : Merci pour vos encouragements, ça me fait plaisir que ce tutoriel puisse aider et plaire à la fois !

mikell : Oui, j'avais l'idée de la ListView mais ça cette époque là, je ne la maîtrisais pas totalement et voulant rester dans un tutoriel pour débutant, j'ai préféré quelque chose de simple.

Cela dit, peut-être faire une partie avancée car j'ai fais un prog utilisant une listview gérée par un .ini, et ça mérite d'être vu car c'est franchement utile !
Étudiant en 2ème année de Licence Informatique.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [Tuto] L'utilisation des fichiers ini

#7

Message par Tlem »

L'utilisation des expressions régulières pour recréer l'existant est un très bon exercice de style, mais je doute que cela soit d'une grande utilité pour un débutant !

Les fonctions intégrées suffisent largement à faire la même chose sans expressions régulières ...
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [Tuto] L'utilisation des fichiers ini

#8

Message par mikell »

C'était effectivement un exercice de style :wink:
Tout en ayant conscience (bien sûr) de légèrement sur les bords réinventer la roue... :mrgreen:
Tiens ça c'est beaucoup plus propre
► Afficher le texte
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [Tuto] L'utilisation des fichiers ini

#9

Message par Tlem »

Dans ce cas, il faudrait modifier légèrement ta signature ...
La solution la plus simple est toujours la meilleure (Mon grand-père)
Mais j'aime bien explorer les solutions plus complexes !
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
timmalos
Niveau 11
Niveau 11
Messages : 1970
Enregistré le : dim. 18 mai 2008 15:16
Status : Hors ligne

Re: [Tuto] L'utilisation des fichiers ini

#10

Message par timmalos »

N'oubliez pas cet exemple qui est une gui pour afficher et modifier un .ini
http://autoitscript.fr/forum/viewtopic.php?f=6&t=8183
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [Tuto] L'utilisation des fichiers ini

#11

Message par mikell »

Mais j'aime bien explorer les solutions plus complexes !
Ben oui j'avoue ... Image
Quoique, solution différente oui, mais plus complexe pas tellement
En fait une fois qu'on a compris les 3 regexp (qui sont très simples) le reste n'est que de l'affichage d'array comme on pourrait le faire en utilisant les fonctions ini, et d'ailleurs je suis pas sûr qu'avec les fonctions ini ça ferait un script tellement plus court

@timmalos
Ton script est un monstre :mrgreen:
Mais il renvoie un message d'erreur si le ini contient une section vide (ce qui peut arriver), et dommage qu'il soit limité à l'édition des valeurs
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [Tuto] L'utilisation des fichiers ini

#12

Message par Tlem »

En ce qui me concerne, je préfère ce genre de code et d'affichage :
► Afficher le texte
Par contre, en faisant mes tests, je me retrouve avec quelque chose d'étrange avec la fonction IniReadSectionNames() lorsque je veux lire le fichier win.ini du répertoire Windows !!!
Celui-ci retourne un nombre de sections plus importantes que ce qui y est réellement !!!
Je me suis dit au début que j'avais un peut trop abusé de la Despé, mais après avoir remplacé le fichier win.ini originel par un fichier modifié (une seule section et une seule clé), IniReadSectionNames() me trouve toujours des sections inexistantes dans ce fichier. :shock:

Si quelqu'un pouvait faire quelques tests afin de confirmer ou d'infirmer ce comportement, je lui en serait grès.
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
blacksoul305
Membre émérite
Membre émérite
Messages : 957
Enregistré le : ven. 18 mars 2011 11:49
Localisation : Au pays des programmeurs.
Status : Hors ligne

Re: [Tuto] L'utilisation des fichiers ini

#13

Message par blacksoul305 »

Tlem a écrit :Si quelqu'un pouvait faire quelques tests afin de confirmer ou d'infirmer ce comportement, je lui en serait grès.
Pour moi ce sera 37 sections alors que j'en vois seulement 8.
Étudiant en 2ème année de Licence Informatique.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [Tuto] L'utilisation des fichiers ini

#14

Message par mikell »

Je confirme :shock:
Ton script renvoie des résultats tout à fait surprenants avec "C:\WINDOWS\win.ini" : sections en plus, ou sections existantes mais contenu différent
Très inattendu et spectaculaire Image

Cela dit je me sens moralement obligé de te faire remarquer (au passage) que mon script te retourne le contenu de win.ini avec une exactitude et une précision d'horlogerie suisse :P

Edit : et vlan pour les fonctions intégrées :twisted:
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
blacksoul305
Membre émérite
Membre émérite
Messages : 957
Enregistré le : ven. 18 mars 2011 11:49
Localisation : Au pays des programmeurs.
Status : Hors ligne

Re: [Tuto] L'utilisation des fichiers ini

#15

Message par blacksoul305 »

Vous pouvez rien dire boss, le chat orange marque un point. :lol:
Étudiant en 2ème année de Licence Informatique.
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [Tuto] L'utilisation des fichiers ini

#16

Message par Tlem »

mikell a écrit :et vlan pour les fonctions intégrées :twisted:
Généralement, les fonctions intégrées sont certainement plus stables qu'une expression régulière qui peut être sensible à divers cas non prévus.

En l'occurence, nous nous trouvons sans doute en présence d'un sacré bug que je signalerais demain si d'autres confirme ce fonctionnement plus qu'étrange. :wink:
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Avatar du membre
blacksoul305
Membre émérite
Membre émérite
Messages : 957
Enregistré le : ven. 18 mars 2011 11:49
Localisation : Au pays des programmeurs.
Status : Hors ligne

Re: [Tuto] L'utilisation des fichiers ini

#17

Message par blacksoul305 »

Pourquoi le bug en question n'affecterait seulement un fichier ini et en particulier celui se trouvant dans le répertoire WINDOWS ? Je ferai des tests de mon côté, et vous tiendrez au courant.
Étudiant en 2ème année de Licence Informatique.
Avatar du membre
mikell
Spammer !
Spammer !
Messages : 6292
Enregistré le : dim. 29 mai 2011 17:32
Localisation : Deep Cévennes
Status : Hors ligne

Re: [Tuto] L'utilisation des fichiers ini

#18

Message par mikell »

Tlem a écrit :Généralement, les fonctions intégrées sont certainement plus stables qu'une expression régulière qui peut être sensible à divers cas non prévus.
Je le sais bien mais là tout de suite tu ne m'enlèveras pas ces quelques instants d'intense jubilation :twisted:
Sont tout spécialement appréciés : "Généralement" et les "divers cas non prévus"

Bon plus sérieusement, on a aussi la blague avec "C:\WINDOWS\system.ini" , mais pas avec d'autres ini présents dans C:\WINDOWS
Apparemment c'est sur les ini système de windows, faudrait en tester d'autres pour voir
" L'échec est le fondement de la réussite. " (Lao-Tseu )
" Plus ça rate, plus on a de chances que ça marche " (les Shadoks )
Avatar du membre
jguinch
Modérateur
Modérateur
Messages : 2511
Enregistré le : lun. 14 févr. 2011 22:12
Status : Hors ligne

Re: [Tuto] L'utilisation des fichiers ini

#19

Message par jguinch »

Bonjour
J'ai reproduit le bug sur mon PC (Windows 7 64), aussi bien compilé en 32 ou 64 bits.
Tu avais raison, Tlem, Le bug apparaît également avec system.ini
Bizarre aussi, si on fait IniReadSectionNames(@ScriptDir & "\win.ini"), ça fonctionne même si le fichier n'existe pas.

Peut être que c'est voulu, vu les valeurs retounées... Mais ça n'explique pas pourquoi @ScriptDir & "\win.ini" renvoi des valeurs...
Le script, ça fait gagner beaucoup de temps... à condition d'en avoir beaucoup devant soi !
Avatar du membre
Tlem
Site Admin
Site Admin
Messages : 11773
Enregistré le : ven. 20 juil. 2007 21:00
Localisation : Bordeaux
Status : Hors ligne

Re: [Tuto] L'utilisation des fichiers ini

#20

Message par Tlem »

@jguinchard
Effectivement, c'est encore plus étrange ...

@mikell
Même si ce que j'ai relevé montre un bug évident dans IniReadSectionNames, ta fonction n'en est pas moins dépourvue ...
En effet dans certains cas non prévus :roll: , ta fonction retourne un nombre erroné de sections. :mrgreen:
En faisant quelques tests sur divers fichiers .ini, je suis tombé sur deux fichiers dont certaines lignes ont été commentées. 8)

Bon, je m'en vais de ce pas exposer cet étrange phénomène sur le forum US. Nous verrons bien ce qu'ils répondrons.

Edit :
Pour ceux qui vaudraient suivre cette actualité, c'est par ici : http://www.autoitscript.com/forum/topic ... tionnames/
Thierry

Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...

Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Répondre