- Offizieller Beitrag
Servus.
Da es in AutoIt keine Befehel zu speichern oder lesen von Array´s (in) aus einer Inidatei gibt hab ich kurzerhand selbst was geschrieben.
Beispiel:
Spoiler anzeigen
#include <Array.au3>
#include<IniArray_UDF.au3>
Dim $aTest[6] = [5, "Eintrag1", "Eintrag2", "Eintrag3", "Eintrag4", "Eintrag5"]
Dim $aTest2[6][2]
$IniFile = @ScriptDir & "\Test.ini"
For $i = 1 To 5;Erzeugen des 2D Testarrays
$aTest2[$i][0] = $aTest[$i]
$aTest2[$i][1] = $i
Next
_IniWriteArray($IniFile, "Test", "Eintrag1", $aTest, True)
_IniWriteArray($IniFile, "Test", "Eintrag2", $aTest2, True)
$Test1 = _IniReadArray($IniFile, "Test", "Eintrag1", True)
_ArrayDisplay($Test1,"1D Array mit Index")
$Test2 = _IniReadArray($IniFile, "Test", "Eintrag2", True)
_ArrayDisplay($Test2,"2D Array mit Index")
$Test1 = _IniReadArray($IniFile, "Test", "Eintrag1", False)
_ArrayDisplay($Test1,"1D Array ohne Index")
$Test2 = _IniReadArray($IniFile, "Test", "Eintrag2", False)
_ArrayDisplay($Test2,"2D Array ohne Index")
IniArray_UDF:
Spoiler anzeigen
#include <Array.au3>
[/autoit] [autoit][/autoit] [autoit];#Function# ============================================================================================================================================
; Name............: _IniWriteArray
; Description.....: Schreibt ein 1D oder 2D Array in eine Inidatei
; Syntax..........: _IniWriteArray($sfilename, $sSection, $sKey, $aArray, $bStripIdx = False)
; Parameters......:
; $sfilename - Dateiname des Inifiles
; $sSection - Sectionname
; $sKey - Keyname
; $aArray - Das zu speichernde Array
; $bStripIdx - [optional] Index entfernen. Bei True wird element 0 des Array´s ignoriert
; Return values .:
; Success - 1
; Failure - -1 , sets @error to:
; | 1 Übergebenes Array ist kein Array
; | 2 Array ist ein 3D Array und kann nicht verarbeitet werden
; | 3 Array konnte nicht in String umgewandelt werden
; | 4 Erzeugter String konnte nicht in die INI Datei geschrieben werden
;
; Author ........: [email='Raupi@Autoit.de'][/email]
; Modified.......:
; Remarks .......:
; Related .......:
; Link ..........;
; Example .......;
; ======================================================================================================================================================
Func _IniWriteArray($sfilename, $sSection, $sKey, $aArray, $bStripIdx = False)
Local $iIndex = 0, $sDimens = "1D", $sTemp, $sTemp
If UBound($aArray, 2) <> 0 Then $sDimens = "2D"
If Not IsArray($aArray) Then Return SetError(1, 0, -1)
If UBound($aArray, 3) <> 0 Then Return SetError(2, 0, -1)
If $sDimens = "1D" Then
If $bStripIdx = True Then
$sTemp1 = _ArrayToString($aArray, '|', 1)
If @error Then Return SetError(3, 0, -1)
Else
$sTemp1 = _ArrayToString($aArray, '|')
If @error Then Return SetError(3, 0, -1)
EndIf
Else
If $bStripIdx = True Then
$sTemp1 = _Array2D2String($aArray, 1, 0, '|', ',')
If @error Then Return SetError(3, 0, -1)
Else
$sTemp1 = _Array2D2String($aArray, 0, 0, '|', ',')
If @error Then Return SetError(3, 0, -1)
EndIf
EndIf
$sTemp = $sDimens & "*" & $sTemp1
IniWrite($sfilename, $sSection, $sKey, $sTemp)
If @error Then Return SetError(4, 0, -1)
Return 1
EndFunc ;==>_IniWriteArray
;#Function# ============================================================================================================================================
; Name............: _IniReadArray
; Description.....: Liest ein Array aus einer INI-Datei das mittels _IniWriteArray darin gespeichert wurde
; Syntax..........: _IniReadArray($sfilename, $sSection, $sKey, $bCreateIdx = False)
; Parameters......:
; $sfilename - Dateiname des Inifiles
; $sSection - Sectionname
; $sKey - Keyname
; $aArray - Das zu speichernde Array
; $bCreateIdx - [optional] Bei True wird in Element 0 des Array´s die Anzahl der Einträge gespeichert
; Return values .:
; Success - Das Ausgelesene Array
; Failure - 0 , sets @error to:
; | 1 INI-Eintrag konnte nicht gelesen werden
; | 2 INI-Eintag wurde nicht mit _IniWriteArray in die Datei geschrieben
; | 3 Array konnte nicht erzeugt werden
;
; Author ........: [email='Raupi@Autoit.de'][/email]
; Modified.......:
; Remarks .......:
; Related .......:
; Link ..........;
; Example .......;
; ======================================================================================================================================================
Func _IniReadArray($sfilename, $sSection, $sKey, $bCreateIdx = False)
Local $sTemp, $aTemp, $aTemp1
$sTemp = IniRead($sfilename, $sSection, $sKey, "Not Found")
If $sTemp = "Not Found" Then Return SetError(1, 0, 0)
$aTemp = StringSplit($sTemp, "*", 2)
If Not IsArray($aTemp) Then SetError(2, 0, 0)
If $aTemp[0] = "1D" Then
If $bCreateIdx Then
$aTemp1 = StringSplit($aTemp[1], "|", 0)
If Not IsArray($aTemp1) Then Return SetError(3, 0, 0)
Else
$aTemp1 = StringSplit($aTemp[1], "|", 2)
If Not IsArray($aTemp1) Then Return SetError(3, 0, 0)
EndIf
Else
$aTemp1 = _String2Array2D($aTemp[1], '|', ',', $bCreateIdx)
If @error Then Return SetError(3, 0, 0)
EndIf
Return $aTemp1
EndFunc ;==>_IniReadArray
;#Function# ============================================================================================================================================
; Name............: _Array2D2String
; Description.....: Wandelt ein 2D Array in einen String um
; Syntax..........: _Array2D2String($Array, $iStart = 0, $iEnd = 0, $DelimRow = '|', $DelimCol = ',')
; Parameters......:
; $Array - Array das umgewandelt werden soll
; $iStart - [optional] Index ab welchem gestartet werden soll
; $iEnd - [optional] Index bis zu welchem verarbeitet werden soll
; $DelimRow - [optional] Seperator für Rows
; $DelimCol - [optional] Seperator für Colums
; Return values .:
; Success - String mit dem Inhalt des Array´s
; Failure - 1 Übergebenes Array ist kein Array
; Author ........: [email='BugFix@Autoit.de'][/email]
; Modified.......:
; Remarks .......:
; Related .......:
; Link ..........;
; Example .......;
; ======================================================================================================================================================
Func _Array2D2String($Array, $iStart = 0, $iEnd = 0, $DelimRow = '|', $DelimCol = ','); Funktion zum erstellen eines Strings von einem 2D Array (c) BugFix
If Not IsArray($Array) Then Return SetError(1, 0, 0)
Local $sOut = ''
If $iStart < 0 Then $iStart = 0
If $iEnd = 0 Or $iEnd > UBound($Array) - 1 Then $iEnd = UBound($Array) - 1
For $i = $iStart To $iEnd
For $j = 0 To UBound($Array, 2) - 1
$sOut &= $Array[$i][$j] & $DelimCol
Next
$sOut = StringTrimRight($sOut, 1) & $DelimRow
Next
Return StringTrimRight($sOut, 1)
EndFunc ;==>_Array2D2String
;#Function# ============================================================================================================================================
; Name............: _String2Array2D
; Description.....: Wandel einen mit _Array2D2String konvertierten String in ein Array um.
; Syntax..........: _String2Array2D($string, $DelimRow = '|', $DelimCol = ',', $nIndex = False)
; Parameters......:
; $string - Umzuwandelnder String
; $DelimRow - [optional] Seperator für Rows
; $DelimCol - [optional] Seperator für Colomns
; $bIndex - [optional] Index mit Anzahl der enthaltenen Einträge wird erstellt. False = kein Index erstellen
; Return values .:
; Success - Array das erstellt wurde
; Failure - 1 Parameter $bIndex ist nicht vom Type Boolean
; - 2 Row Split nicht erfolgreich
; - 3 Column Split nicht erfolgreich
; Author ........: [email='BugFix@Autoit.de'][/email]
; Modified.......: [email='Raupi@Autoit.de'][/email]
; Remarks .......:
; Related .......:
; Link ..........;
; Example .......;
; ======================================================================================================================================================
Func _String2Array2D($string, $DelimRow = '|', $DelimCol = ',', $Idx = False); Funktion von BugFix erweitert von Raupi
If Not IsBool($Idx) Then Return SetError(1, 0, 0)
Local $tmp = StringSplit($string, $DelimRow, 2)
If @error Then Return SetError(2, 0, 0)
Local $tmp1 = StringSplit($tmp[0], $DelimCol, 2)
If @error Then Return SetError(3, 0, 0)
Local $aOut[UBound($tmp) + $Idx][UBound($tmp1)]
For $i = 0 To UBound($tmp) - 1
$tmp1 = StringSplit($tmp[$i], $DelimCol, 2)
For $j = 0 To UBound($tmp1) - 1
$aOut[$i + $Idx][$j] = $tmp1[$j]
Next
Next
If $Idx = True Then $aOut[0][0] = UBound($aOut, 1) - 1
Return $aOut
EndFunc ;==>_String2Array2D
Zu beachten ist, das die Zeichen | , und * im Array nicht vorkommen dürfen, da sie zum Erzeugen des Array benutz werden. Ggf. muß die Funktion angepaßt werden.
Ich hoffe die Funktionen kann jemand gebrauchen.