- Offizieller Beitrag
Hi,
ich hatte ja schon mal versucht ein "assoziatives Array" zu erstellen, um jenen die Arbeit zu erleichtern, die mit Indexzugriff so ihre Problemchen haben.
Ich habe das Konzept jetzt kpl. überarbeitet und durch Symbiose von Array und Struktur einen Speichertyp erstellt, der die Vorteile beider Typen nutzt - die StrukturListe.
Jedes Element wird über eine Struktur definiert und mit dem ersten Wert der Struktur, dem IndexWert, angesprochen.
Wobei ich der Einfachheit halber eine Beschränkung auf die Datentypen i=Integerwert, f=Fließkommawert und c=Zeichenfolge vorgenommen habe. Um auch die Zeichenfolge in der Länge variabel zu halten wird beim Erstellen der Struktur die max. Länge festgelegt, oder mit "-1" der Standard ( 128 ) übernommen.
Da Werte in Strukturen sowohl per 1-basiertem Index als auch per vergebenem Bezeichner angesprochen werden können, ergibt sich nun die Möglichkeit Werte direkt über den Namen zu setzen/zu lesen.
Im beigefügten Bsp. habe ich alle bisher existierenden Funktionen eingesetzt und kommentiert.
Eine ausführliche Funktionsbeschreibung findet ihr im jeweiligen Funktionsheader.(Um Includes zu vermeiden sind zwei umbenannte Arrayfunktionen mit enthalten.)
Edit: Noch nen Kopierfehler gefixt.
Edit 28.02.2010
- 2 weitere Funktionen zum Schreiben der Liste in Datei und Lesen aus Datei
- als Standardseparator wird nun mit "Default" das Zeichen von Opt("GUIDataSeparatorChar") verwendet
Funktionsübersicht StrukturListe
_StrucList_Create()
Erzeugt eine Strukturliste mit max. 20 Strukturelementen
Erstes Element ($s1) MUSS Indexelement sein (eineindeutig, in gesamter List einmalig)!
ElementSyntax: "typ;Bezeichnung", z.B. "c;Artikelbezeichnung" od. "i;Anzahl" od. "f;Preis"
Typen: "c" - Zeichenkette; "i" - Integerwert; "f" - Fließkommawert
_StrucList_AddIndex()
Fügt der Liste einen neuen Index (wahlweise mit Werten) hinzu
_StrucList_SetValue()
Fügt Detailwerte für einen Indexwert hinzu
Entweder Einzelwerte oder alle Details gemeinsam als Zeichenkette
_StrucList_GetValue()
Rückgabe eines oder aller Detailwerte(s) für den angegebenen Indexwert
Bei Rückgabe aller Werte wahlweise als Array od. Trennzeichen-String
_StrucList_GetIndices()
Rückgabe aller Indexwerte der Strukturliste als Trennzeichen-String oder Array
_StrucList_Delete()
Löschen eines oder aller Listenelemente
_StrucList_Count()
Gibt die Anzahl der Listenelemente zurück
_StrucList_SearchIndex()
Ermittelt, ob ein IndexWert in der Liste enthalten ist
_StrucList_WriteToFile()
Speichert Struktur und Werte in einer Datei
_StrucList_CreateFromFile()
Erstellt eine Strukturliste aus einer mit _StrucList_WriteToFile gespeicherten Liste
Beispielskript
#include <StructureList.au3>
[/autoit] [autoit][/autoit] [autoit]; eine Structure-List erstellen
; erstes Element MUSS Indexelement sein (eineindeutig, in gesamter List einmalig)
; erster Parameter setzt die max. Länge von Stringelementen, mit "-1" = 128
Local $strucList = _StrucList_Create(-1, 'c;Artikel', 'i;ArtNr', 'i;Menge', 'f;EKNetto', 'f;VKNetto')
; der List ein Element zufügen
If _StrucList_AddIndex($strucList, 'Schlagschrauber') Then _
ConsoleWrite('Schlagschrauber zugefügt' & @CRLF & @CRLF)
; die Werte für das Element einzeln hinzufügen
If _StrucList_SetValue($strucList, 'Schlagschrauber', 'ArtNr', 102030) Then _
ConsoleWrite('Schlagschrauber, Detail: ArtNr zugefügt' & @CRLF)
If _StrucList_SetValue($strucList, 'Schlagschrauber', 'Menge', 25) Then _
ConsoleWrite('Schlagschrauber, Detail: Menge zugefügt' & @CRLF)
If _StrucList_SetValue($strucList, 'Schlagschrauber', 'EKNetto', 35.05) Then _
ConsoleWrite('Schlagschrauber, Detail: EKNetto zugefügt' & @CRLF)
If _StrucList_SetValue($strucList, 'Schlagschrauber', 'VKNetto', 49.50) Then _
ConsoleWrite('Schlagschrauber, Detail: VKNetto zugefügt' & @CRLF & @CRLF)
; ein weiteres Element zufügen
If _StrucList_AddIndex($strucList, 'Kettensäge') Then _
ConsoleWrite('Kettensäge zugefügt' & @CRLF & @CRLF)
; ein neues Element inklusive Daten zufügen (z.B. aus Datei ausgelesen)
Local $ValuesToSet = "Turboflex|107090|41|75.05|95.40"
If _StrucList_AddIndex($strucList, -1, $ValuesToSet) Then _
ConsoleWrite('Turboflex hinzugefügt, inklusive aller Details' & @CRLF & @CRLF)
; die Werte in einem String übergeben !! Reihenfolge identisch, wie in der Struktur, ohne Indexelement
$ValuesToSet = "104050|17|188.45|225.30"
If _StrucList_SetValue($strucList, 'Kettensäge', -1, $ValuesToSet, Default) Then _
ConsoleWrite('Kettensäge, alle Details hinzugefügt' & @CRLF & @CRLF)
; Werte für ein Element abfragen
ConsoleWrite('Schlagschrauber, ArtNr: ' & _
_StrucList_GetValue($strucList, 'Schlagschrauber', 'ArtNr') & @CRLF)
ConsoleWrite('Schlagschrauber, Menge: ' & _
_StrucList_GetValue($strucList, 'Schlagschrauber', 'Menge') & @CRLF)
ConsoleWrite('Schlagschrauber, EKNetto: ' & _
_StrucList_GetValue($strucList, 'Schlagschrauber', 'EKNetto') & @CRLF)
ConsoleWrite('Schlagschrauber, VKNetto: ' & _
_StrucList_GetValue($strucList, 'Schlagschrauber', 'VKNetto') & @CRLF & @CRLF)
; alle Werte eines Elements gemeinsam zurückgeben
[/autoit] [autoit][/autoit] [autoit]; - als trennzeichenbasierter String
ConsoleWrite('Schlagschrauber, Details als String: ' & @CRLF & @TAB & _
_StrucList_GetValue($strucList, 'Schlagschrauber', 0 , Default) & @CRLF & @CRLF)
ConsoleWrite('Turboflex, Details als String: ' & @CRLF & @TAB & _
_StrucList_GetValue($strucList, 'Turboflex', 0, Default) & @CRLF & @CRLF)
; - als Array
Local $aRet = _StrucList_GetValue($strucList, 'Kettensäge', 0, 'A')
ConsoleWrite('Kettensäge, Details als Array:' & @CRLF)
For $i = 0 To UBound($aRet) - 1
ConsoleWrite(@TAB & 'Array[' & $i & ']: ' & $aRet[$i] & @CRLF)
Next
ConsoleWrite(@CRLF)
; Anzahl Elemente ausgeben
ConsoleWrite('Anzahl Elemente = ' & _
_StrucList_Count($strucList) & @CRLF & @CRLF)
; alle Index-Elemente ausgeben
[/autoit] [autoit][/autoit] [autoit]; - als trennzeichenbasierter String
ConsoleWrite('Alle Index-Elemente als String: ' & @CRLF & @TAB & _
_StrucList_GetIndices($strucList, ';') & @CRLF)
; - als Array
Local $aRet = _StrucList_GetIndices($strucList, 'A')
ConsoleWrite('Alle Index-Elemente als Array:' & @CRLF)
For $i = 0 To UBound($aRet) - 1
ConsoleWrite(@TAB & 'Array[' & $i & ']: ' & $aRet[$i] & @CRLF)
Next
ConsoleWrite(@CRLF)
; ein Element löschen
ConsoleWrite('Anzahl Elemente vor Löschen: ' & _
_StrucList_Count($strucList) & @CRLF)
If _StrucList_Delete($strucList, 'Schlagschrauber') Then
ConsoleWrite(@TAB & 'Element Schlagschrauber gelöscht' & @CRLF)
ConsoleWrite('Anzahl Elemente nach Löschen: ' & _
_StrucList_Count($strucList) & @CRLF & @CRLF)
Else
ConsoleWrite(@TAB & 'Löschen fehlgeschlagen.' & @CRLF & @CRLF)
EndIf
; auf Existenz eines Elements (IndexWert) prüfen
ConsoleWrite('Element Kettensäge vorhanden?' & @TAB & _
_StrucList_SearchIndex($strucList, 'Kettensäge') & @CRLF & @CRLF)
; === Liste in Datei speichern
_StrucList_WriteToFile($strucList, @ScriptDir & '\StrucList.txt')
; === aus Datei neu laden
$strucList2 = _StrucList_CreateFromFile(@ScriptDir & '\StrucList.txt')
; === Indexwerte der gelesenen Liste
ConsoleWrite('index values read from file: ' & _StrucList_GetIndices($strucList2, Default) & @CRLF & @CRLF)
Code Funktionen
;==================================================================================================
; Function Name: _StrucList_Create($charLen, $s1 [, ...$s20])
; Description:: Erzeugt eine Strukturliste mit max. 20 Strukturelementen
; Erstes Element ($s1) MUSS Indexelement sein (eineindeutig, in gesamter List einmalig)!
; ElementSyntax: "typ;Bezeichnung", z.B. "c;Artikelbezeichnung" od. "i;Anzahl" od. "f;Preis"
; Typen: "c" - Zeichenkette; "i" - Integerwert; "f" - Fließkommawert
; Parameter(s): $charLen - die max. Länge für Elemente vom Typ "c - Zeichenkette", Standard= -1 (128 Zeichen)
; $s1 - erstes Strukturelement(Indexelement), MUSS einmalig und eineindeutig sein
; optional: $s2...20 - weitere Strukturelemente
; Return Value(s): Erfolg - Rückgabe Strukturlist-Variable
; Fehler - kein Strukturelement definiert
; Author(s): BugFix ([email='bugfi@autoit.de'][/email])
;==================================================================================================
Func _StrucList_Create($charLen = -1, $s1 = '', $s2 = '', $s3 = '', $s4 = '', $s5 = '', $s6 = '', $s7 = '', $s8 = '', $s9 = '', $s10 = '', _
$s11 = '', $s12 = '', $s13 = '', $s14 = '', $s15 = '', $s16 = '', $s17 = '', $s18 = '', $s19 = '', $s20 = '')
If $charLen < 1 Then $charLen = 128
If $s1 = '' Then Return SetError(1,0,0)
Local $val, $type, $struc = ''
For $i = 1 To 20
$val = Eval('s' & $i)
If $val = '' Then
ExitLoop
Else
$type = StringLeft($val, 1)
$val = StringTrimLeft($val, 2)
EndIf
Switch $type
Case 'i'
$struc &= 'int64 ' & $val & ';'
Case 'f'
$struc &= 'double ' & $val & ';'
Case Else
$struc &= 'wchar ' & $val & '[' & $charLen & '];'
EndSwitch
Next
Local $aStruc[1][2] = [[StringTrimRight($struc, 1)]]
Return $aStruc
EndFunc ;==>_StrucList_Create
;==================================================================================================
; Function Name: _StrucList_AddIndex(ByRef $strucList, $IndexValue=-1, $sValues='', $Separator = Default)
; Description:: Fügt der Liste einen neuen Index (wahlweise mit Werten) hinzu
; Parameter(s): $strucList - eine zuvor mit _StrucList_Create() erzeugte Liste
; $IndexValue - der Indexwert, über den alle Details in diesem Listenelement
; angesprochen werden
; - mit $IndexValue = -1 werden gleich alle Werte eingetragen
; optional: $sValues - wenn $IndexValue = -1, Trennzeichenstring mit allen einzutragenden Werten
; optional: $Separator - wenn $IndexValue = -1, Trennzeichen für Wert-String
; Return Value(s): Erfolg 1
; Fehler 0 @error = 1 - $strucList ist keine Strukturvariable
; @error = 2 - $IndexValue ist bereits vorhanden
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;==================================================================================================
Func _StrucList_AddIndex(ByRef $strucList, $IndexValue = -1, $sValues = '', $Separator = Default)
If Not IsArray($strucList) Then Return SetError(1,0,0)
If $IndexValue <> -1 Then
_ArraySearch($strucList, $IndexValue, 1)
If Not @error Then Return SetError(2,0,0)
ReDim $strucList[UBound($strucList) + 1][2]
$strucList[UBound($strucList) - 1][0] = $IndexValue
$strucList[UBound($strucList) - 1][1] = DllStructCreate($strucList[0][0])
DllStructSetData($strucList[UBound($strucList) - 1][1], 1, $IndexValue)
Else
If $Separator = Default Then $Separator = Opt("GUIDataSeparatorChar")
Local $aSet = StringSplit($sValues, $Separator)
_ArraySearch($strucList, $aSet[1], 1)
If Not @error Then Return SetError(2,0,0)
ReDim $strucList[UBound($strucList) + 1][2]
$strucList[UBound($strucList) - 1][0] = $aSet[1]
$strucList[UBound($strucList) - 1][1] = DllStructCreate($strucList[0][0])
For $i = 1 To UBound($aSet) -1
DllStructSetData($strucList[UBound($strucList) - 1][1], $i, $aSet[$i])
Next
EndIf
Return 1
EndFunc ;==>_StrucList_AddIndex
;==================================================================================================
; Function Name: _StrucList_SetValue(ByRef $strucList, $IndexValue, $Element, $Value, $Separator = Default)
; Description:: Fügt Detailwerte für einen Indexwert hinzu
; Entweder Einzelwerte durch Angabe $Element/$Wert oder
; alle Details gemeinsam als Zeichenkette durch: $Element=-1 / $Value=Wert-String / Stringseparator
; Bei Übergabe aller Detailwerte muß die Reihenfolge identisch zur Struktur sein!
; Parameter(s): $strucList - eine zuvor mit _StrucList_Create() erzeugte Liste
; $IndexValue - der Indexwert, über den alle Details in diesem Listenelement
; angesprochen werden
; $Element - Bezeichnung des Elements, dessen Wert gesetzt werden soll (-1 = alle Werte in einem String)
; - das Element kann mit Namen oder 1-basiertem Index in der Struktur angesprochen werden
; $Value - Wert für $Element (wenn $Element = -1, String mit allen Werten, außer Indexwert)
; optional: $Separator - wenn $Element = -1, Trennzeichen für Wert-String
; Return Value(s): Erfolg 1
; Fehler 0 @error = 1 - $strucList ist keine Strukturvariable
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;==================================================================================================
Func _StrucList_SetValue(ByRef $strucList, $IndexValue, $Element, $Value, $Separator = Default)
If Not IsArray($strucList) Then Return SetError(1,0,0)
Local $index = _ArraySearch($strucList, $IndexValue, 1)
If @error Then Return SetError(2,0,0) ; IndexWert nicht enthalten
If $Element <> -1 Then
DllStructSetData($strucList[$index][1], $Element, $Value)
Else
If $Separator = Default Then $Separator = Opt("GUIDataSeparatorChar")
Local $aSet = StringSplit($Value, $Separator, 2), $iElement = 2
For $j = 0 To UBound($aSet) - 1
$tmp = DllStructSetData($strucList[$index][1], $iElement, $aSet[$j])
$iElement += 1
Next
EndIf
Return 1
EndFunc ;==>_StrucList_SetValue
;==================================================================================================
; Function Name: _StrucList_GetValue(ByRef $strucList, $IndexValue, $Element = 0, $Separator = 'A')
; Description:: Rückgabe eines/aller Detailwerte(s) für den angegebenen Indexwert.
; Bei Rückgabe aller Werte wahlweise als Array od. Trennzeichen-String.
; Parameter(s): $strucList - eine zuvor mit _StrucList_Create() erzeugte Liste
; $IndexValue - der Indexwert, über den alle Details in diesem Listenelement
; angesprochen werden
; $Element - Bezeichnung des Elements, dessen Wert gelesen werden soll (0 = alle Werte in einem String)
; - das Element kann mit Namen oder 1-basiertem Index in der Struktur angesprochen werden
; optional: $Separator - wenn $Element = 0, Trennzeichen für Wert-String
; - mit $Separator = 'A' werden die Werte als Array zurückgegeben
; Return Value(s): Erfolg Rückgabe Wert- String/Array
; Fehler 0 @error = 1 - $strucList ist keine Strukturvariable
; @error = 2 - $IndexValue ist nicht vorhanden
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;==================================================================================================
Func _StrucList_GetValue(ByRef $strucList, $IndexValue, $Element = 0, $Separator = 'A')
If Not IsArray($strucList) Then Return SetError(1,0,0)
Local $index = _ArraySearch($strucList, $IndexValue, 1)
If @error Then Return SetError(2, 0, 0)
Local $Out = ''
If IsString($Element) Or $Element > 0 Then
$Out = DllStructGetData($strucList[$index][1], $Element)
Else
Local $n = 1, $sep = '|', $tmp
If $Separator <> 'A' Then
If $Separator = Default Then $Separator = Opt("GUIDataSeparatorChar")
$sep = $Separator
EndIf
While True
$tmp = DllStructGetData($strucList[$index][1], $n)
If @error = 2 Then ExitLoop
$Out &= $tmp & $sep
$n += 1
WEnd
$Out = StringTrimRight($Out, StringLen($sep))
If $Separator = 'A' Then $Out = StringSplit($Out, '|', 2)
EndIf
Return $Out
EndFunc ;==>_StrucList_GetValue
;==================================================================================================
; Function Name: _StrucList_GetIndices(ByRef $strucList, $Separator = 'A')
; Description:: Rückgabe aller Indexwerte der Strukturliste als Trennzeichen-String oder Array
; Parameter(s): $strucList - eine zuvor mit _StrucList_Create() erzeugte Liste
; optional: $Separator - Trennzeichen für Ausgabestring
; - mit $Separator = 'A' werden die Werte als Array zurückgegeben
; Return Value(s): Erfolg Rückgabe String/Array mit allen Indexwerten
; Fehler @error = 1 - $strucList ist keine Strukturvariable
; @error = 2 - Strukturliste ist leer
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;==================================================================================================
Func _StrucList_GetIndices(ByRef $strucList, $Separator = 'A')
If Not IsArray($strucList) Then Return SetError(1,0,0)
If UBound($strucList) = 1 Then Return SetError(2,0,0)
Local $Out = '', $sep = '|'
If $Separator <> 'A' Then
If $Separator = Default Then $Separator = Opt("GUIDataSeparatorChar")
$sep = $Separator
EndIf
For $i = 1 To UBound($strucList) - 1
$Out &= $strucList[$i][0] & $sep
Next
$Out = StringTrimRight($Out, StringLen($sep))
If $Separator = 'A' Then $Out = StringSplit($Out, '|', 2)
Return $Out
EndFunc ;==>_StrucList_GetIndices
;==================================================================================================
; Function Name: _StrucList_Delete(ByRef $strucList, $IndexValue = -1)
; Description:: Löschen eines/aller Listenelemente
; Parameter(s): $strucList - eine zuvor mit _StrucList_Create() erzeugte Liste
; optional: $IndexValue - IndexWert, der gelöscht werden soll (-1 löscht alle Elemente)
; Return Value(s): Erfolg 1
; Fehler 0 @error = 1 - $strucList ist keine Strukturvariable
; @error = 2 - $IndexValue ist nicht vorhanden
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;==================================================================================================
Func _StrucList_Delete(ByRef $strucList, $IndexValue = -1)
If Not IsArray($strucList) Then Return SetError(1,0,0)
If $IndexValue < -1 Then $IndexValue = -1
If $IndexValue = -1 Then
Local $aTmp[1][2] = [[$strucList[0][0]]]
$strucList = $aTmp
Return 1
EndIf
Local $index = _ArraySearch($strucList, $IndexValue, 1)
If @error Then Return SetError(2,0,0)
_ArrayDelete($strucList, $index)
Return 1
EndFunc ;==>_StrucList_Delete
;==================================================================================================
; Function Name: _StrucList_Count(ByRef $strucList)
; Description:: Gibt die Anzahl der Listenelemente zurück
; Parameter(s): $strucList - eine zuvor mit _StrucList_Create() erzeugte Liste
; Return Value(s): Erfolg Anzahl der Listenelemente
; Fehler 0 @error=1 - $strucList ist keine Strukturvariable
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;==================================================================================================
Func _StrucList_Count(ByRef $strucList)
If Not IsArray($strucList) Then Return SetError(1,0,0)
Return UBound($strucList) - 1
EndFunc ;==>_StrucList_Count
;==================================================================================================
; Function Name: _StrucList_SearchIndex(ByRef $strucList, $IndexValue)
; Description:: Ermittelt, ob ein IndexWert in der Liste enthalten ist
; Parameter(s): $strucList - eine zuvor mit _StrucList_Create() erzeugte Liste
; $IndexValue - IndexWert, der gesucht wird
; Return Value(s): Erfolg TRUE = gefunden / FALSE = nicht gefunden
; Fehler 0 @error = 1 - $strucList ist keine Strukturvariable
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;==================================================================================================
Func _StrucList_SearchIndex(ByRef $strucList, $IndexValue)
If Not IsArray($strucList) Then Return SetError(1,0,0)
_ArraySearch($strucList, $IndexValue, 1)
If @error Then
Return False
Else
Return True
EndIf
EndFunc ;==>_StrucList_SearchIndex
;==================================================================================================
; Function Name: _StrucList_WriteToFile(ByRef $strucList, $sFile, $Separator = Default)
; Description:: Speichert die Struktur mit Werten in eine Datei
; Parameter(s): $strucList - eine mit _StrucList_Create() / _StrucList_CreateFromFile erstellte Liste
; $sFile - kpl. Dateipfad
; $Separator - mit 'Default' wird das Zeichen von Opt("GUIDataSeparatorChar") verwendet
; Return Value(s): Erfolg 1
; Fehler 0 @error = 1 - $strucList ist keine Strukturvariable
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;==================================================================================================
Func _StrucList_WriteToFile(ByRef $strucList, $sFile, $Separator = Default)
If Not IsArray($strucList) Then Return SetError(1,0,0)
Local $fh, $sTmp, $j = 1, $sToWrite = $strucList[0][0] & @CRLF
If $Separator = Default Then $Separator = Opt("GUIDataSeparatorChar")
For $i = 1 To UBound($strucList) -1
While True
$sTmp = DllStructGetData($strucList[$i][1], $j)
If @error Then ExitLoop
$sToWrite &= $sTmp & $Separator
$j += 1
WEnd
$j = 1
$sToWrite = StringTrimRight($sToWrite, StringLen($Separator)) & @CRLF
Next
$fh = FileOpen($sFile, 10)
FileWrite($fh, $sToWrite)
FileClose($fh)
EndFunc ;==>_StrucList_WriteToFile
;==================================================================================================
; Function Name: _StrucList_CreateFromFile($sFile, $Separator = Default)
; Description:: Erzeugt eine Strukturliste aus einer Datei
; Parameter(s): $sFile - kpl. Dateipfad
; $Separator - mit 'Default' wird das Zeichen von Opt("GUIDataSeparatorChar") verwendet
; Return Value(s): Erfolg Strukturvariable
; Fehler 0 @error = 1 - $sFile existiert nicht
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;==================================================================================================
Func _StrucList_CreateFromFile($sFile, $Separator = Default)
If Not FileExists($sFile) Then Return SetError(1,0,0)
If $Separator = Default Then $Separator = Opt("GUIDataSeparatorChar")
Local $aFile, $aTmp
_FileReadToArray($sFile, $aFile)
Local $aStruct[$aFile[0]][2]
$aStruct[0][0] = $aFile[1]
If $aFile[0] = 1 Then Return $aStruct
For $i = 2 To $aFile[0]
$aTmp = StringSplit($aFile[$i], $Separator)
$aStruct[$i-1][0] = $aTmp[1]
$aStruct[$i-1][1] = DllStructCreate($aStruct[0][0])
For $j = 1 To $aTmp[0]
DllStructSetData($aStruct[$i-1][1], $j-1, $aTmp[$j])
Next
Next
Return $aStruct
EndFunc ;==>_StrucList_CreateFromFile
Probiert mal und gebt Feedback, falls ihr Veränderungen/Erweiterungen dazu wünscht.