_Array2String & Übergabe an Combobox

  • Bin vor kurzen mal beim Lesen über das hier gestolpert.

    [autoit]

    #include <Array.au3>
    Dim $avArray[20]
    For $i = 0 to UBound( $avArray ) - 1
    $avArray[$i] = Random( -20000, 20000, 1)
    $avArray[$i] = Random( -20000, 20000, 1)
    Next
    _ArrayDisplay($avArray, "$avArray")
    MsgBox(0, "_ArrayToString() getting $avArray items 1 to 7", _ArrayToString($avArray, "|", 1, 7))

    [/autoit]

    das klappt, wenn ich aber mittels inireadsection ein Array befühlt habe, dann sieht das ja so aus

    [autoit]

    #include <Array.au3>
    Dim $avArray[20][2]
    For $i = 0 to UBound( $avArray ) - 1
    $avArray[$i][0] = Random( -20000, 20000, 1)
    $avArray[$i][1] = Random( -20000, 20000, 1)
    Next
    _ArrayDisplay($avArray, "$avArray")
    MsgBox(0, "_ArrayToString() getting $avArray items 1 to 7", _ArrayToString($avArray, "|", 1, 7))

    [/autoit]

    und das geht nicht, warum weil nicht bekannt ist welche Spalte ?
    Habe sonst immer geprüft ob Ergebnismenge "" oder "1" und bei mehr als einem Eintrag an die vorangegangende Variable drangeklebt.
    das funktioniert auch aber die Lösung sieht eleganter aus, sofern einer eine Lösung kennt.

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

    Einmal editiert, zuletzt von Dietmar (24. Juli 2009 um 19:46)

  • [autoit]


    Func _ArrayToString(Const ByRef $avArray, $sDelim = "|", $iStart = 0, $iEnd = 0)
    If Not IsArray($avArray) Then Return SetError(1, 0, "")
    If UBound($avArray, 0) <> 1 Then Return SetError(3, 0, "") ; Darum gehts nicht.

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

    Local $sResult, $iUBound = UBound($avArray) - 1

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

    ; Bounds checking
    If $iEnd < 1 Or $iEnd > $iUBound Then $iEnd = $iUBound
    If $iStart < 0 Then $iStart = 0
    If $iStart > $iEnd Then Return SetError(2, 0, "")

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

    ; Combine
    For $i = $iStart To $iEnd
    $sResult &= $avArray[$i] & $sDelim
    Next

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

    Return StringTrimRight($sResult, StringLen($sDelim))
    EndFunc ;==>_ArrayToString

    [/autoit]

    Hilft dir jetzt aber auch nicht weiter :(

    \edit

    Spoiler anzeigen
    [autoit]


    Func _ArrayToString2D(Const ByRef $avArray, $sDelim = "|", $iStart = 0, $iEnd = 0)
    If Not IsArray($avArray) Then Return SetError(1, 0, "")
    Local $sResult, $iUBound = UBound($avArray) - 1
    If UBound($avArray, 0) = 1 Then ;Return SetError(3, 0, "")

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

    ; Bounds checking
    If $iEnd < 1 Or $iEnd > $iUBound Then $iEnd = $iUBound
    If $iStart < 0 Then $iStart = 0
    If $iStart > $iEnd Then Return SetError(2, 0, "")

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

    ; Combine
    For $i = $iStart To $iEnd
    $sResult &= $avArray[$i] & $sDelim
    Next

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

    Return StringTrimRight($sResult, StringLen($sDelim))

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

    ElseIf UBound($avArray, 0) = 2 Then
    ; Bounds checking
    If $iEnd < 1 Or $iEnd > $iUBound Then $iEnd = $iUBound
    If $iStart < 0 Then $iStart = 0
    If $iStart > $iEnd Then Return SetError(2, 0, "")

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

    ; Combine
    For $i = $iStart To $iEnd
    $sResult &= $avArray[$i][0] & $sDelim & $avArray[$i][1] & $sDelim
    Next

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

    Return StringTrimRight($sResult, StringLen($sDelim))
    EndIf
    EndFunc ;==>_ArrayToString2D

    [/autoit]


    So ca.? Ist jetzt nur schnell ausprobiert, mit viel copy & paste und wenig nachdenken.

    Einmal editiert, zuletzt von nuts (23. Juli 2009 um 21:07)

  • In Gefahr laufend ausgelacht zu werden....
    so bestücke weil z.B. eine ComboBox mit dem Laufwerksbuchstaben + CD Label
    Wenn ich ein array habe zerlege ich es auf vergleichbare Weise.

    [autoit]

    Func label()
    If NOT @error Then
    For $i = 1 to $drv_cnt[0]
    If $i = 1 Then
    $lwklabel = $drv_cnt[$i] & "\"
    If StringRight(DriveGetLabel( $drv_cnt[$i]),1) = "" Then
    $lwklabel = $lwklabel & $leer
    Else
    $lwklabel = $lwklabel & DriveGetLabel( $drv_cnt[$i])
    EndIf
    $label = $lwklabel
    ElseIf $i > 1 Then
    $lwklabel = $drv_cnt[$i] & "\"
    If StringRight(DriveGetLabel( $drv_cnt[$i]),1) = "" Then
    $lwklabel = $lwklabel & $leer
    Else
    $lwklabel="|" & $lwklabel & DriveGetLabel( $drv_cnt[$i])
    EndIf
    $label = $label & "|" & $lwklabel
    EndIf
    Next
    EndIf
    EndFunc

    [/autoit]

    Geht das mit dem Befehl oder einem anderen nicht auch einfacher?

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o