CSV-Datei für ComboBox

  • Hi Guru's,

    ich hoffe mein Problem ist nichst schon gepostet - wenn ja ich hab's nicht gesehen.
    Also ich möchte eine CSV-Datei mit 2 Spalten einlesen und für 2 ComboBoxen verwenden.

    Beispiel-Datei

    A;A1
    A;A2
    A;A3
    B;B1
    B;B2
    C;C1

    Wenn man jetzt die erste ComboBox auswählt (z.B: A) sollte die 2. Combo mit den Werten des 2. Feldes (A1,A2,A3) befüllt werden.
    Wie kann man das am Besten lösen?

    Danke Charly


    bernd670: Leerzeilen gelöscht, Leerzeilen machen den Beitrag ganz schön unübersichtlich!

    2 Mal editiert, zuletzt von bernd670 (11. März 2010 um 05:19)

  • Erstmal hallo und willkommen im Forum,
    Fürs nächste Mal wärs schön, wenn du nicht soviele Leerzeilen machst. ;)

    Zu deiner Frage.
    Probier mal das:

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <File.au3>
    #include <GUIConstantsEx.au3>
    #include <GUIComboBox.au3>

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

    Global $Array, $Last, $StringCombo2

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

    $Gui = GUICreate("Gui", 200, 200)
    $Combo1 = GUICtrlCreateCombo("", 10, 10, 100, 20)
    $Combo2 = GUICtrlCreateCombo("", 10, 60, 100, 20)
    GUISetState()

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

    _FileReadToArray("Test.csv", $Array)

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

    For $i = 1 To $Array[0]
    If $Array[$i] <> "" Then
    $Split = StringSplit($Array[$i], ";")
    $StringCombo2 &= $Split[2] & ";"
    If $Last <> $Split[1] Then GUICtrlSetData($Combo1, $Split[1])
    $Last = $Split[1]
    EndIf
    Next

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

    _GUICtrlComboBox_SetCurSel($Combo1, 0)

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

    $ArrayCombo2 = StringSplit($StringCombo2, ";")

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

    While 1
    Switch GUIGetMsg()
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Combo1
    GUICtrlSetData($combo2, "")
    $ReadCombo1 = GUICtrlRead($Combo1)
    ConsoleWrite($ReadCombo1)
    For $i = 1 To $ArrayCombo2[0]
    If StringLeft($ArrayCombo2[$i], 1) = $ReadCombo1 Then GUICtrlSetData($Combo2, $ArrayCombo2[$i])
    Next
    _GUICtrlComboBox_SetCurSel($Combo2, 0)
    EndSwitch
    WEnd

    [/autoit]

    Meinst du so??

  • Hallo charly,

    herzlich willkommen im Forum und viel Spass mit AutoIt.
    Hier noch eine 2. Lösung, die sich universeller einsetzen lässt:

    Spoiler anzeigen
    [autoit]

    #Include <GuiComboBox.au3>
    #include <GUIConstantsEx.au3>
    #include <array.au3>
    #include <File.au3>

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

    Const $sCSV = @ScriptDir & "\2cbo.CSV"
    Const $sElect = "bitte auswählen"
    Dim $a_sCSV, $aSplit, $scboChr = ""
    _FileReadToArray($sCSV,$a_sCSV)
    Dim $aCSV[$a_sCSV[0]][2]
    for $i = 1 to UBound($a_sCSV) - 1
    ConsoleWrite($i & $a_sCSV[$i] & @CRLF)
    $aSplit = StringSplit($a_sCSV[$i],";")
    if not StringInStr($scboChr,$aSplit[1]) Then $scboChr &= $aSplit[1] & "|"
    $aCSV[$i-1][0] = $aSplit[1]
    $aCSV[$i-1][1] = $aSplit[2]
    Next
    ConsoleWrite($scboChr & @CRLF)

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

    $hGui = GUICreate("2 Comboboxen aus 1er CSV ", 250, 120, 302, 218)
    $hcboChr = GUICtrlCreateCombo($sElect, 8, 8, 200, 25)
    GUICtrlSetData(-1,$scboChr)
    $hcboChrNr = GUICtrlCreateCombo("",8,35,200,25)
    $hbtnExit = GUICtrlCreateButton("Be&enden", 8, 65)

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

    GUISetState(@SW_SHOW)

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE, $hbtnExit
    Exit
    Case $hcboChr
    $sVal = GUICtrlRead($hcboChr)
    if $sVal <> $sElect Then
    $aSplit = _ArrayFindAll($aCSV,$sVal,0,0,True,True,0)
    GUICtrlSetData($hcboChrNr,"")
    $scboChr = ""
    for $i = 0 to UBound($aSplit) - 1
    $scboChr &= $aCSV[$aSplit[$i]][1] & "|"
    Next
    ConsoleWrite($scboChr & @CRLF)
    GUICtrlSetData($hcboChrNr,$scboChr)
    _GUICtrlComboBox_SetCurSel($hcboChrNr, 0)
    EndIf
    EndSwitch
    WEnd

    [/autoit]

    funktioniert auch mit CSV-Aufbau wie diesem:

    Spoiler anzeigen
    [autoit]

    Auto;Felgen
    Werkzeug;BitSätze
    Werkzeug;Schraubenschlüssel
    Auto;Reifen
    Zubehör;Enteiserspray
    Auto;Kühler

    [/autoit]

    viel Spass damit

  • Hi,
    herzlichen Dank für die Ideen bzw. Scripts - ist nicht selbstverständlich und in anderen Foren nicht so prompt (wenn überhaupt) :thumbup:
    Ich habe mich für die 1. Lösung entschieden - klappt wunderbar und zeigt mir wieder einmal wie leicht solche Dinge mit AU3 gehen (im Vergleich zu vbs, ps,... )
    Danke Charly