Speichern, Laden in Combobox..

  • Heyho!
    Ich hab da mal ne kleine Frage..

    Wie schaffe ich es- aus einer Textdatei bestimmte Sachen in eine Combobox zu schreiben?

    Jaja GuiCtrlSetData ... Aber ich hab jetzt kp von StringSplit etc..

    Also;:

    Ich habe eine Textdatei..
    Da steht beispielsweise das hier drin: (Aus einer Listbox ausgelesen)


    Code
    127.0.0.1|16000|Nein!
    Code
    127.0.0.1|16001|Nein!
    Code
    127.0.0.1|16002|Nein!


    ... Wie schaffe ich es jetzt- den Inhalt SO in eine Combobox zu schreiben?

    In der Combobox soll dann praktisch nur pro Zeile das stehen:


    Code
    127.0.0.1:16000
    Code
    127.0.0.1:16001
    Code
    127.0.0.1:16002

    Hoffe ich habs gut genug erklärt ;o
    Mfg~!

    Einmal editiert, zuletzt von xSnake (24. Februar 2013 um 15:25)

  • [autoit]


    $aData = StringSplit($sInhalt, "|")
    $aData[0] ; Anzahl von "Splits"
    $aData[1] ; Erster Split, in diesem Fall die IP
    $aData[2] ; Zweiter Split, in diesem Fall der Port
    $aData[3] ; Dritter Split, in diesem Fall... was auch immer

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

    GuiCtrlSetData($hCombo, $aData[1] & ":" & $aData[2])

    [/autoit]

    Wenn du das alles in ne Combo tun willst würde das so aussehen:

    [autoit]


    Local $i = 1
    $sRead = FileReadLine("blub.txt", $i)
    While $sRead <> ""
    $sRead = FileReadLine("blub.txt", $i)
    $aData = StringSplit($sRead, "|")
    GUICtrlSetData($hCombo, $aData[1] & ":" & $aData[2], $i)
    $i += 1
    WEnd

    [/autoit]

    Einmal editiert, zuletzt von Nakroma (24. Februar 2013 um 15:26)

  • [autoit]


    $aData = StringSplit($sInhalt, "|")
    $aData[0] ; Anzahl von "Splits"
    $aData[1] ; Erster Split, in diesem Fall die IP
    $aData[2] ; Zweiter Split, in diesem Fall der Port
    $aData[3] ; Dritter Split, in diesem Fall... was auch immer

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

    GuiCtrlSetData($hCombo, $aData[1] & ":" & $aData[2])

    [/autoit]

    Danke :)

  • [autoit]

    C:\Users\user\Desktop\master.au3 (176) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:GUICtrlSetData($connectServerCombo, $aData[1] & ":" & $aData[2])GUICtrlSetData($connectServerCombo, $aData[1] & ":" & ^ ERROR

    [/autoit]
  • Man verwendet keine Arrays ohne zu überprüfen ob überhaupt eines vorliegt! Das ist eben das Problem, wenn Anfänger versuchen mit ihrem Halbwissen anderen Anfängern zu helfen... ^^ Der Fehler sagt dir, dass du auf ein Array-Element zugreifst das nicht existiert. Deshalb musst du vorher überprüfen ob in $Array[0] die richtige Anzahl an Ergebnissen zurückgegeben wurde. Außerdem könntest du auch mit Hilfe des Befehls "IsArray()" überprüfen ob überhaupt eine Array zurückgegeben wurde und mit "Ubound()" dann die Länge des Arrays überprüfen... ;)

    LG
    Christoph :)

  • Mach mal das rein:

    [autoit]


    Local $i = 1
    $sRead = FileReadLine("blub.txt", $i)
    While $sRead <> ""
    $sRead = FileReadLine("blub.txt", $i)
    $aData = StringSplit($sRead, "|")
    If $aData[0] = 3 Then
    GUICtrlSetData($hCombo, $aData[1] & ":" & $aData[2], $i)
    $i += 1
    EndIf
    WEnd

    [/autoit]

    2 Mal editiert, zuletzt von Nakroma (24. Februar 2013 um 18:53)

  • Ich würde das ganze etwas anders lösen:

    [autoit]


    Local $i = 1
    $aLines = StringSplit(FileRead(@ScriptDir & '\Datei.txt' ), @LF) ; Zeilenanzahl aus Datei ermitteln (Falls @LF nicht funktioniert, kannst du auch einmal @CR und @CRLF probieren, ich kenne den Unterschied leider selber nicht so genau. Kann mir das jemand erklären?)
    For $i = 1 To $aLines[0] ; Hochzählen von 1 bis zur Anzahl der Zeilen
    $sLine = FileReadLine("Datei.txt", $i) ; Aktuelle Zeile auslesen
    $aSplit = StringSplit($sLine, "|") ; Zeile bei jedem "|" splitten
    If IsArray($aSplit) And $aSplit[0] = 3 Then ; Wenn $aSplit ein Array ist und 3 Spalten hat:
    GUICtrlSetData($idCombo, $aSplit[1] & ":" & $aSplit[2], $i) ; Wert in ComboBox schreiben
    EndIf
    Next

    [/autoit]

    Damit hast du eine Zeile weniger und es läuft zuverlässiger (und evtl sogar schneller).
    Ist aber unformatiert und ungetestet, da ich es mit dem Smartphone getippt habe.

    Gruß
    Joriktos

    Edit: Habe es nun mit 4 Leerzeichen für ein Tabulatorzeichen formatiert.

    Da es hier doch einige falsch machen:

    Zitat von einem User dieses Forums

    Die Standard-Standart eines Flamingos ist einbeinig. ;)

    Einmal editiert, zuletzt von Joriktos (24. Februar 2013 um 23:08)