Variierende Anzahl von Dimensionen in einem Array

  • Ich wollte ein paar Funktionen schreiben mit denen man Varriablen(Arrays eingeschlossen) in Dateinen abgespeichern kann und wieder aufgerufen kann.

    Spoiler anzeigen
    [autoit]


    ; #FUNCTION# ====================================================================================================================
    ; Name...........: VarRead
    ; Description ...: List Varriablen, welche voher mit VarWrite in einer Datei gespeichert wurden, aus
    ; Syntax.........: VarRead($ort[,$VarName])
    ; Parameters ....: $ort - Der Ziel Pfad
    ; $VarName - Name der Varriable
    ; Return values .: Success - Inhalt der Varriable oder ein Array welches alle Variablen und ihre Inhalte enthält
    ; Failure - -1
    ; Author ........: Ich
    ; Related .......: VarWrite
    ; ===============================================================================================================================

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

    Func VarRead($Ort,$VarName = -175)
    $Read = FileRead($ort)
    If $Read = "" Then Return -1
    If $VarName = -175 Then
    $Read = StringSplit(StringReplace($Read,@lf,""),@cr)
    For $i = 1 to $Read[0]
    If $Read[$i] = "" Then
    Dim $Var[$i][2]
    $Var[0][0] = $i - 1
    For $i = 1 to $Var[0][0]
    $Var[$i][0] = $Read[$i]
    $Var[$i][1] = StringReplace(StringReplace($Read[$i + $Var[0][0]+1],"62^7@cr54^1",@cr),"62^7@lf54^1",@lf)
    next
    Return $Var
    Endif
    next
    Else
    $Read = StringSplit(StringReplace($Read,@lf,""),@cr)
    For $i = 1 to $Read[0]
    If $Read[$i] = "" Then Return 0
    If $Read[$i] = $VarName Then
    For $i2 = $i to $Read[0]
    If $Read[$i2] = "" Then exitloop
    If $i2 = $Read[0] Then Return -1
    next

    Return StringReplace(StringReplace($Read[$i2 + $i],"62^7@cr54^1",@cr),"62^7@lf54^1",@lf)
    Endif
    next
    EndIf
    EndFunc ;==>VarRead

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

    ; #FUNCTION# ====================================================================================================================
    ; Name...........: VarWrite
    ; Description ...: Speichert Varriablen in eine Datei
    ; Syntax.........: VarWrite($Ort,$VarInhalt,$VarName)
    ; Parameters ....: $ort - Der Ziel Pfad
    ; $VarInhalt - Der Inhalt welcher der Varriable zugeordnet werden soll
    ; $VarName - Name der Varriable
    ; Return values .: Success - 1
    ; Failure - -1
    ; Author ........: Ich
    ; Related .......: VarRead
    ; ===============================================================================================================================

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

    Func VarWrite($Ort,$VarInhalt,$VarName)
    If Stringlen($VarName) < 1 Then Return -1
    $VarInhalt = StringReplace(StringReplace($VarInhalt,@cr,"62^7@cr54^1"),@lf,"62^7@lf54^1")
    $Read = FileRead($ort)
    If $Read = "" Then
    FileWrite($ort,$VarName&@crlf&@crlf&$VarInhalt)
    Return 1
    EndIf
    $Read = StringSplit(StringReplace($Read,@lf,""),@cr)
    If @error Then Return -1
    For $i = 1 to $Read[0]
    If $Read[$i] = $VarName Then
    For $i2 = $i to $Read[0]
    If $Read[$i2] = "" Then
    $Read[$i2 + $i] = $VarInhalt
    $Txt = ""
    For $i3 = 1 to $Read[0]
    $Txt &= $Read[$i3]&@crlf
    next
    FileDelete($ort)
    FileWrite($ort,StringTrimRight($Txt,2))
    Return 1
    Endif
    next
    Return -1
    EndIf
    If $Read[$i] = "" Then
    $txt = ""
    $einmal = 0
    For $i2 = 1 to $Read[0]
    If $Read[$i2] = "" and $einmal = 0 Then
    $txt &=$VarName&@crlf
    $einmal = 1
    EndIf
    $txt &=$Read[$i2]&@crlf
    next
    $txt &=$VarInhalt
    FileDelete($ort)
    FileWrite($ort,$Txt)
    Return 1
    EndIf
    next
    Return -1
    EndFunc

    [/autoit]


    noch ohne Arrays natürlich

    Das ist leider auch schon alles was ich habe (außer die ArraytoString Funktion oben)

  • würde es nicht gehen wenn du sofort eine 64-dimensionale Array erstellst und dann nur mit den arbeitest die du brauchst?

    [autoit]


    Dim $Array1[5][6]
    ;ist das gleiche wie
    Dim $Array2[1][1][5][6]

    [/autoit]

    und mit ReDim kannst du sie dann beliebig verendern

  • @Jeka: Nein das würde es nicht denn dies sollte eine Funktion werden mit der man Arrays abspeichern und wieder laden kann und ich glaube das keiner Spaß daran hätte mit 64-dimensionalen Arrays zu arbeiten.
    Ein eindimensionales Array würde nach deiner Methode so aussehen:

    [autoit]


    $array[1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][1][5]

    [/autoit]


    und wenn ich es mit ReDim verändere müsste ich ja dann 64 Möglichkeiten für Dimensionen bereitstellen, zusammen mit ein paar schleifen zum bestücken des Arrays mit werten(natürlich für jede Dimensions möglichkeit einzeln).

    und ich habe dies eh schon aufgegeben.


    Sorry für die Späte Antwort aber ich kann in letzter zeit nur sehr selten in I-Net.