- 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
#region - Timestamp
; 2012-08-15 17:23:17
#endregion - Timestamp
#include <array.au3>
Global $X[10][5]
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")
;#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
;#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
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
;#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