Page 2 sur 2
Re: [Tuto] L'utilisation des fichiers ini
Posté : dim. 22 juil. 2012 10:46
par Iste
Haha ! C'est le registre qui est retourné.
Changez des trucs dans [HKEY_CURRENT_USER\Control Panel\International] et vous verrez ^^
La 2em section est [HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon] semblerait il
Re: [Tuto] L'utilisation des fichiers ini
Posté : dim. 22 juil. 2012 10:57
par mikell
Tlem a écrit :En effet dans certains cas non prévus , ta fonction retourne un nombre erroné de sections
Oh ça m'intéresse ça, je peux avoir un exemple précis ?
Re: [Tuto] L'utilisation des fichiers ini
Posté : dim. 22 juil. 2012 11:03
par Iste
Le probleme semble venir de windows car cette page :
http://www.en.na.mcneel.com/doslib/conf ... getini.htm
Nous donne en exemple pour "C:\\Windows\\win.ini"
► Afficher le texte
Code : Tout sélectionner
"AeDebug" "Clock" "Colors" "Compatibility" "Console" "Cursors" "DeskTop" "Devices" "Embedding" "Extensions" "Fonts" "FontSubstitutes" "GRE_Initialize" "Intl" "IOProcs" "MCI Extensions" "ModuleCompatibility" "MSCharMap" "Net_Files" "NWCS" "Ports" "PrinterPorts" "Sounds" "TrueType" "Twain" "Windows Help" "Winlogon" "Network" "Windows" "fonts" "extensions" "mci extensions" "files" "Mail" "MCI Extensions.BAK" "MSUCE" "SciCalc" "WS_FTP" "CKSN"
or chez moi j’obtiens
► Afficher le texte
Code : Tout sélectionner
Intl
Winlogon
Fonts
FontSubstitutes
AeDebug
Ports
PrinterPorts
Devices
MODULECOMPATIBILITY
TRUETYPE
NWCS
EXTENSIONS
TWAIN
MSCHARMAP
CONSOLE
CURSORS
NET_FILES
EMBEDDING
WINDOWS HELP
IOPROCS
COLORS
GRE_INITIALIZE
DESKTOP
SOUNDS
MCI EXTENSIONS
CLOCK
NETWORK
Windows
fonts
extensions
mci extensions
files
Mail
MCI Extensions.BAK
J'en conclu donc que AutoIt utilise l'api windows qui a un comportement non documenté.
Mais il ne faut pas oublier que les .ini sont vieux, et ne devraient plus etre utilisé...
Re: [Tuto] L'utilisation des fichiers ini
Posté : dim. 22 juil. 2012 11:11
par blacksoul305
Iste a écrit :
Mais il ne faut pas oublier que les .ini sont vieux, et ne devraient plus etre utilisé...
Ah non monsieur, impossible de me passer des .ini moi ! Ils sont trop utiles !
EDIT : Tlem, nouveau
message.
Re: [Tuto] L'utilisation des fichiers ini
Posté : dim. 22 juil. 2012 11:12
par Tlem
@mikell
Prend un de tes fichiers .ini et rajoute un ";" en début de ligne pour la mettre en commentaire.
@Iste
Je suis entièrement d'accord, mais la fonction ne devrait pas faire le distingo entre un fichier standard et le win.ini ou le system.ini.
Je me doute bien que c'est probablement lié à l'API, mais dans ce cas il faudrait que l'information soit notifiée dans la documentation.
Re: [Tuto] L'utilisation des fichiers ini
Posté : dim. 22 juil. 2012 12:16
par mikell
Tlem a écrit :Je me doute bien que c'est probablement lié à l'API, mais dans ce cas il faudrait que l'information soit notifiée dans la documentation.
ça serait la moindre des choses, parce que tout obsolètes que peuvent être les fichiers ini, les fonctions pour les traiter sont encore proposées dans Autoit et largement utilisées
Le bug que tu as relevé dans mon script est quand même plus facile à corriger
► Afficher le texte
Code : Tout sélectionner
#include <Array.au3>
$ini = @ScriptDir & "\SPA.ini"
;$ini = "C:\WINDOWS\win.ini"
_Display($ini)
Func _Display($ini_file)
Local $txt = FileRead($ini_file), $section, $keys, $values, $array[1][3], $k = 0
Local $contenu_sections = StringRegExp($txt, '(\[[^\[]+)', 3) ; sépare les sections
For $i = 0 to UBound($contenu_sections) - 1 ; pour chaque section
$section = StringRegExp($contenu_sections[$i], '\[([^\]]+)', 3)
$keys = StringRegExp($contenu_sections[$i], '([\S\h]*)=', 3)
$values = StringRegExp($contenu_sections[$i], '=([\S\h]*)', 3)
If IsArray($keys) Then
Redim $array[$k+UBound($keys)][3]
$array[$k][0] = $section[0] ; nom de la section
For $j = 0 to UBound($keys) - 1 ; pour chaque key
If not StringRegExp($keys[$j], '^\s*;' ) Then ; lignes non commentées
;~ $array[$k][0] = $section[0] ; nom section
$array[$k][1] = $keys[$j] ; nom key
$array[$k][2] = StringRegExpReplace($values[$j], '\s*;.*$', "") ; nom value
$k += 1
EndIf
Next
Else ; si section vide
Redim $array[$k+1][3]
$array[$k][0] = $section[0] ; nom section seulement
$k += 1
EndIf
Next
_ArrayDisplay($array)
EndFunc
Re: [Tuto] L'utilisation des fichiers ini
Posté : dim. 22 juil. 2012 12:21
par Tlem
Oui, mais si je ne l'avais pas signalé, il aurait pu mettre en cause n'importe quel fichier .ini, alors que le bug relevé sur
IniReadSection() ne concerne que les fichiers win.ini et system.ini.
Le besoin de traitement de ces fichiers est quand même bien plus limité.
Re: [Tuto] L'utilisation des fichiers ini
Posté : dim. 22 juil. 2012 13:06
par mikell
Tout à fait Thierry, mais le bug report ça fait aussi partie du jeu, sans fondamentalement remettre le script en cause
Pour
IniReadSection() , une fonction qui s'en va lire le registre alors qu'elle est censée lire un fichier, c'est quand même glauque quelque part
Re: [Tuto] L'utilisation des fichiers ini
Posté : dim. 22 juil. 2012 16:28
par Tlem
Re: [Tuto] L'utilisation des fichiers ini
Posté : dim. 22 juil. 2012 17:21
par jguinch
Re
J'ai trouvé une doc qui peut être intéressante, concernant les fichiers INI et les API :
http://msdn.microsoft.com/en-us/library ... 85%29.aspx
La partie
Remarks parle d'une clé dans la base de registre qui permet de mapper les fichiers INI.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\IniFileMapping
Win.ini et system.ini sont présents, et effectivement les chemins des fichiers ne sont pas indiqués : c'est pour ça que si on renomme notre fichier en win.ini ou tout autre nom défini dans la clé IniFileMapping, on obtiens nos informations, plus celle qui sont mappées.
Mais comme le dit Tlem, ça devrait apparaître dans la doc des fonctions IniRead...
Re: [Tuto] L'utilisation des fichiers ini
Posté : dim. 22 juil. 2012 19:39
par timmalos
Je voudrais quand meme soutenir Tlem. Quoi que tu puisse penser Mikell, quand une fonction de base existe, elle sera toujours plus efficace qu'un script créé par une personne. Tout simplement parce que le nombre de bugs possibles est reporté beaucoup plus rapidement.
Ton script est peut être simple a modifier, mais il ne prend pas encore compte de tous les cas possibles d'un .ini, et certains comportements provoqueront une erreur dans ta fonction, alors que ce comportement aura 99,99999% de chance d'avoir déjà été corrigé dans une fonction de base. Tu ne peux juste pas rivaliser entre les quelques dizaines de milliers de script qui utilisent IniRead et les 30 qui utilisent le tien. C'est statistique.
Re: [Tuto] L'utilisation des fichiers ini
Posté : dim. 22 juil. 2012 19:53
par mikell
C'est clair, entre un script vieux de 24 heures et des fonctions qui tournent depuis des années, ya pas photo
Hier samedi, mikell a écrit :C'était effectivement un exercice de style