Bis zu 4 Variablen in beliebieger Reihenfolge in Datei schreiben.

  • Hi,

    ich möchte gerne 4 Variablen in eine Datei schreiben. Die Datei soll im csv Format gespeichert werden. Also müssen die Variablen in einer Zeile stehen. Man kann mit checkboxen noch wählen ob alle Variablen oder nur bestimmte gespeichert werden. Zudem soll der benutzer auch noch die Reihenfolge per Inputfelder festlegen können.

    Mir würde als Lösung jetzt nur Select Case einfallen. Aber dann müsste ich ja für ziemlich viele Variationsmöglichkeiten Cases anlegen.
    Habt ihr da eine Gute Idee?

    Danke
    Gruß Daniel

  • Mach doch einfach eine 2 Lists 1 mit allen vorhandenen und 1 mit denen, die rein geschrieben werden sollen und dann eben noch was um die items in der list zu sortieren dann musst du diese nur auslesen und dem entsprechend rein schreiben

  • "einfaches Beispiel"
    [autoit]

    #include <GUIConstants.au3>
    #include <Array.au3>

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

    Dim $aCheckbox[4][2] = [[0, "var1"],[1, "var2"],[2, "var3"],[3, "var4"]]
    Dim $aInput[4]

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

    #region - GUI Create
    GUICreate("", 200, 400)
    $top = 8
    For $i = 0 To 3
    $aCheckbox[$i][0] = GUICtrlCreateCheckbox($aCheckbox[$i][1], 8, $top, 40, 25)
    $aInput[$i] = GUICtrlCreateInput("", 50, $top, 50, 25)
    GUICtrlSetLimit(-1, 1)
    $top += 25
    Next
    $button = GUICtrlCreateButton("klick", 8, 120)
    GUISetState()
    #endregion - GUI Create

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

    #region - GUI SelectLoop
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    Case $msg = $button
    _save()
    EndSelect
    WEnd
    #endregion - GUI SelectLoop

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

    Func _save()
    Local $aTmp[4][2]
    For $i = 0 To 3
    If BitAND(GUICtrlRead($aCheckbox[$i][0]), $GUI_CHECKED) = $GUI_CHECKED Then
    $aTmp[$i][0] = $aCheckbox[$i][1]
    $aTmp[$i][1] = GUICtrlRead($aInput[$i])
    EndIf
    Next
    _ArraySort($aTmp, 0, 0, 0, 1)
    ;ab hier in Datei schreiben
    For $i = 1 To UBound($aTmp) - 1
    ConsoleWrite($aTmp[$i][0] & @CRLF)
    Next
    EndFunc ;==>_save

    [/autoit]


    edit: Kleiner Nachtrag. Wenn du es auf diese Weise machst, wäre es besser $aTmp[1][2] zu deklarieren und dann mit _array2dAdd() zu arbeiten. Dann gibt's auch keine leeren Elemente im Array und die Ausgabe ist "sauber". Daran hab ich jetzt nicht gedacht. :)