Je lis une fichier *.ini Section par Section afin de récupérer toutes les Clefs et les valeurs contenues. J'écris le resultat dans un fichier txt, puis je le relis pour supprimer les doublons.
J'aimerai savoir comment fait-on sans passer par un fichier txt?
#include <array.au3>
$IniTypeOfProcess = @ScriptDir & "\ini\example.ini"
$File = @ScriptDir & "\temp\TriDoublons.txt"
_FillComboBoxSearchByTool()
Global $aArray2
Func _FillComboBoxSearchByTool()
SplashTextOn("", "Chargement des données" & @CRLF & "Veuillez patienter svp.", 450, 55, -1, @DesktopHeight / 2, 49)
Global $aArray = IniReadSectionNames($IniTypeOfProcess)
If Not @error Then
For $i = 1 To $aArray[0]
$SectionName = $aArray[$i]
_IniReadSection($SectionName)
$SectionName = ""
Next
EndIf
$DelDoublonsHelp = FileReadToArray($File)
$DeletedDoublons = _ArrayUnique($DelDoublonsHelp)
For $l=1 To UBound($DeletedDoublons)-1
ConsoleWrite($DeletedDoublons[$l] & @CRLF)
Next
SplashOff()
EndFunc
Func _IniReadSection($SectionName)
$aArray2 = IniReadSection($IniTypeOfProcess, $SectionName)
Dim $aArrayTemp[$aArray2[0][0]]
If Not @error Then
For $i = 1 To $aArray2[0][0]
If $aArray2[$i][0] = "" Then
Else
FileWrite($File, $aArray2[$i][0] & @CRLF)
EndIf
Next
EndIf
EndFunc
Modifié en dernier par Hugues le ven. 14 nov. 2014 21:51, modifié 1 fois.
Dans mon fichier ini, je peux retrouver une clef (avec des valeurs differentes) dans chaque section. Si par exemple je lis toute mes sections et que je trouve Clef_1 4 fois, je veux qu'il me retourne qu'1 fois Clef_1 et ça autant de fois que de clef trouvées... Donc supprimer toutes les entrées en double.
Car après j'alimente une ComboBox en fonction de ce tri.
Oui ça c'est impec, mais comment je stock toutes mes clefs dans un array sans me soucier des sections (je pense que c'est ça mon problème de base... )?
#include <Array.au3>
$ini = @ScriptDir & "\Monfichier.ini"
_DeleteDoublons($ini)
Func _DeleteDoublons($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
$DeletedDoublons = _ArrayUnique($array,1)
For $l=2 To UBound($DeletedDoublons)-1
ConsoleWrite($DeletedDoublons[$l] & @CRLF)
Next
;_ArrayDisplay($DeletedDoublons)
EndFunc