_FileWriteFromArray2D und _FileReadToArray2D

    • Offizieller Beitrag

    Servus.
    Da ich in meinem aktuellen Script eine Funktion zum speichern und laden von 2D Array gebraucht habe,
    sind 2 Funktionen entstanden, die eventuell auch andere brauchen können.
    Die Funktionen benutzen standardmäßig nicht druckbare Zeichen als Seperator, so das im Array jedes x beliebige druckbare Zeichen enthalten sein kann.
    Beide Funktionen beruhen auf der Arbeit von BugFix, die er mal vor ewigkeiten für mich erstellt hat. ;)

    Spoiler anzeigen
    [autoit]

    #region - Timestamp
    ; 2012-08-15 17:23:17
    #endregion - Timestamp

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    #include <array.au3>
    Global $X[10][5]

    [/autoit] [autoit][/autoit] [autoit]

    For $I = 0 To 9
    For $K = 0 To 4
    $T = Int(Random(20) + 1) ;erhält eine Zufallszahl zwischen 1 und 20
    $X[$I][$K] = $T
    Next
    Next
    _ArrayDisplay($X, "Beispiel 2D Array")
    $String = _FileWriteFromArray2D($X, "Test.arr")
    $Array2 = _FileReadToArray2D("Test.arr")
    _ArrayDisplay($Array2, "2D Array aus Datei")

    [/autoit] [autoit][/autoit] [autoit]

    ;#Function# ============================================================================================================================================
    ; Name............: _FileWriteFromArray2D
    ; Description.....: Speichert ein 2D Array in einer Datei
    ; Syntax..........: _FileWriteFromArray2D($Array, $File, $iStart = 0, $iEnd = 0, $DelimRow = '', $DelimCol = '')
    ; Parameters......:
    ; $Array - Array das gespeichert werden soll
    ; $File - Name der Textdatei, in welche das Array gespeichert 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 Standard ist das nicht druckbare Zeichen Chr(29) (Gruppentrenner )
    ; $DelimCol - [optional] Seperator für Colums Standard ist das nicht druckbare Zeichen Chr(30)(Datensatz-Trenner)
    ; Return values .:
    ; Success - Array wurde in Datei geschrieben
    ; Failure - 1 Übergebenes Array ist kein Array
    ; - 2 Datei konnte nicht geschrieben werden
    ; Author ........: [email='BugFix@Autoit.de'][/email], [email='Raupi@Autoit.de'][/email]
    ; Modified.......:
    ; Remarks .......: Durch die Verwendung von Steuerzeichen als Seperator, kann jedes druckbare Zeichen im Array enthalten sein
    ; Related .......:
    ; Link ..........;
    ; Example .......;
    ; ======================================================================================================================================================
    Func _FileWriteFromArray2D($Array, $File, $iStart = 0, $iEnd = 0, $DelimRow = "", $DelimCol = ""); Funktion zum erstellen eines Strings von einem 2D Array (c) BugFix
    If $DelimRow = "" Then $DelimRow = Chr(29)
    If $DelimCol = "" Then $DelimCol = Chr(30)
    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
    Local $tmpFile = FileOpen($File, 10)
    FileWrite($tmpFile, StringTrimRight($sOut, 1))
    If @error Then Return SetError(2, 0, 0)
    Return 1
    EndFunc ;==>_FileWriteFromArray2D

    [/autoit] [autoit][/autoit] [autoit]

    ;#Function# ============================================================================================================================================
    ; Name............: _FileReadToArray2D
    ; Description.....: List ein Array aus einer Datei, die mittels _FileWriteFromArray2D erstellt wurde
    ; Syntax..........: _FileReadToArray2D($File, $DelimRow = "", $DelimCol = "", $nIndex = False)
    ; Parameters......:
    ; $File - Datei aus welchen das Array gelesen wird
    ; $DelimRow - [optional] Seperator für Rows, Standard ist das nicht druckbare Zeichen CHR(29)
    ; $DelimCol - [optional] Seperator für Colomns, Standard ist das nicht druckbare Zeichen CHR(30)
    ; $bIndex - [optional] Index mit Anzahl der enthaltenen Einträge wird erstellt. False = kein Index erstellen
    ; Return values .:
    ; Success - Array das erstellt wurde
    ; Failure - 1 Datei existiert nicht oder Pfad falsch angegeben
    ; - 2 Parameter $bIndex ist nicht vom Type Boolean
    ; - 2 Row Split nicht erfolgreich
    ; - 3 Column Split nicht erfolgreich
    ; Author ........: [email='BugFix@Autoit.de'][/email],Raupi@Autoit.de
    ; Modified.......:
    ; Remarks .......: Durch die Verwendung von Steuerzeichen als Seperator, kann jedes druckbare Zeichen im Array enthalten sein
    ; Related .......:
    ; Link ..........;
    ; Example .......;
    ; ======================================================================================================================================================
    Func _FileReadToArray2D($File, $DelimRow = '', $DelimCol = '', $Idx = False); Funktion von BugFix erweitert von Raupi
    If $DelimRow = "" Then $DelimRow = Chr(29)
    If $DelimCol = "" Then $DelimCol = Chr(30)
    If Not FileExists($File) Then Return SetError(1, 0, 0)
    Local $String = FileRead($File)
    If @error Then Return SetError(1, 0, 0)
    If Not IsBool($Idx) Then Return SetError(2, 0, 0)
    Local $tmp = StringSplit($String, $DelimRow, 2)
    If @error Then Return SetError(3, 0, 0)
    Local $tmp1 = StringSplit($tmp[0], $DelimCol, 2)
    If @error Then Return SetError(4, 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 ;==>_FileReadFromArray2D

    [/autoit]

    Edit: Fehler im TimeStamp beseitigt,LUA mag mich heute nicht ;)

    Edit2: Hier nochmal die Funktionen von BugFix, damit kann man ein 2D-Array in einen String wandeln und zurück.

    Spoiler anzeigen
    [autoit]

    ;#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

    [/autoit] [autoit][/autoit] [autoit]

    ; 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

    [/autoit] [autoit][/autoit] [autoit]

    ;#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

    [/autoit]
    • Offizieller Beitrag

    Du hast Recht, ich glaub mir war einfach zu warm, als ich den Namen gewählt habe :rolleyes: