Listbox Daten erkennen und addieren

  • Moin,

    ich habe in einer Listbox folgendes stehen.

    Hallo,08
    Hallo,21

    Ich möchte, daß "Hallo" erkannt wird weil es schon drin steht und die Zahlen hinter dem "Hallo" dann hintereinander stehen.

    Hallo,08,21

    wie kann ich das lösen?

    Gruß
    Wuff

    Einmal editiert, zuletzt von wuff100 (22. September 2012 um 16:26)

  • Das lässt sich sicher mit den String-Befehlen (alla StringSplit, StringTrimLeft, StringRight...) oder eben mit einem StringRegExp lösen... Du kannst dir ja mal die Hilfe zu diesen Befehlen anschauen. ;) Aber mal eine ganz andere Frage: Worum geht es denn genau?, denn es gibt bestimmt eine bessere Lösung als im Text 'herumzufrickeln'... ^^

    LG
    Christoph :)

  • Ist doch oben beschrieben.


    Naja was du denn jetzt genau möchtest ist zumindest mir noch nicht ersichtlich... Ich weis das du irgendwo ein ListBox Control hast, in dem irgendwie "Hallo,08" und
    "Hallo,21" stehen und ich weis das du in einer Schleife etwas aus einer INI-Datei auslesen willst und selbiges dann mit wieder etwas Anderem vergleichen willst. ?( Sorry aber ohne ein Beispiel Script lässt sich da nur Raten und dabei kommt dann sicher nicht das heraus, was du gerne hättest... ;)

    LG
    Christoph :)

  • [autoit]

    #include <Date.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>
    #include <GuiListBox.au3>

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

    #region ### START Koda GUI section ### Form=
    $Form3 = GUICreate("test", 800, 550, -1, -1)
    $List1 = GUICtrlCreateList("", 56, 208, 433, 201)
    GUISetState(@SW_SHOW)

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

    Func Tag_version()
    Return (@MDAY)
    EndFunc ;==>Tag_version
    Sleep(100)
    $vartag = Tag_version()

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

    Func Monat_version()
    Return (@MON)
    EndFunc ;==>Monat_version
    Sleep(100)
    $varmonat = Monat_version()

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

    Local $Readname
    Local $firma1

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

    $offeneZeitenINI = @ScriptDir & "\ini\offeneZeiten.ini"

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

    $sData_offeneZeiten = "name=" & $Readname & @LF & "tag=" & $vartag & @LF & "monat=" & $varmonat & @LF & "firma1=" & $firma1
    $monteurname = IniReadSectionNames($offeneZeitenINI); Alle Sektionen aus Monteur.ini auslesen!
    _ArrayDisplay($monteurname)
    _ArraySort($monteurname, 0, 2, 0)
    _ArrayDisplay($monteurname)

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

    For $i = 2 To $monteurname[0]
    ;~
    $array = IniReadSection($offeneZeitenINI, $monteurname[$i])
    _ArrayDisplay($array)

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

    $nameR = IniRead($offeneZeitenINI, $monteurname[$i], "name", "")
    ;~ Msgbox(0,"",$nameR)
    $tagList = IniRead($offeneZeitenINI, $monteurname[$i], "tag", "")
    ;~ Msgbox(0,"",$tagList)
    $firma1List = IniRead($offeneZeitenINI, $monteurname[$i], "firma1", "")
    ;~ Msgbox(0,"",$firma1List)

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

    If $firma1List = "" Then
    _GUICtrlListBox_AddString($List1, $nameR & ":" & $tagList)
    EndIf
    Next

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE

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

    Exit
    EndSwitch
    WEnd

    [/autoit]

    Die offeneZeiten.ini:

    [hugo 08]
    name=hugo
    tag=08
    monat=09
    firma1=
    [wilma 08]
    name=wilma
    tag=08
    monat=09
    firma1=
    [hugo 15]
    name=hugo
    tag=15
    monat=09
    firma1=5
    [wilma 14]
    name=wilma
    tag=14
    monat=09
    firma1=
    montage1=
    fahrer1=


    Gruß
    Wuff

    2 Mal editiert, zuletzt von wuff100 (9. September 2012 um 11:26)

  • Ich hab mich deinem Script jetzt mal angenommen...

    Spoiler anzeigen
    [autoit]

    #include <Array.au3>
    #include <GuiListBox.au3>

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

    $GUI = GUICreate('test', 800, 550, -1, -1)
    $ListBox = GUICtrlCreateList('', 56, 208, 433, 201)
    GUISetState(@SW_SHOW)

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

    Local $Readname, $Data, $Firma1, $INI = @ScriptDir & '\ini\offeneZeiten.ini'

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

    $Data = 'name=' & $Readname & @LF & 'tag=' & @MDAY & @LF & 'monat=' & @MON & @LF & 'firma1=' & $Firma1
    $MonteurList = IniReadSectionNames($INI)
    _ArrayDisplay($MonteurList)
    _ArraySort($MonteurList, 0, 2, 0)
    _ArrayDisplay($MonteurList)

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

    For $i = 1 To $MonteurList[0]
    $Read_Name = IniRead($INI, $MonteurList[$i], 'name', '')
    $Read_Tag = IniRead($INI, $MonteurList[$i], 'tag', '')
    $Read_Firma1 = IniRead($INI, $MonteurList[$i], 'firma1', '')

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

    If $Read_Firma1 = '' Then _GUICtrlListBox_AddString($ListBox, $Read_Name & ':' & $Read_Tag)
    ; Hier kannst du doch mit den Werten machen, was du willst?!
    Next

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

    Do
    Until GUIGetMsg() = -3

    [/autoit]

    Aber mir ist trotzdem noch nicht klar, WO denn jetzt dein Problem liegt? an der Stelle an der du die Daten aus der INI liest, kannst du doch mit ihnen machen was du möchtest? Du könntest sie zum Beispiel in ein Array schreiben, wenn du sie später wieder benötigst usw. Controls dienen fast nur der Interaktion mit dem User, daher sollten sie nicht als Daten-Ablage missbraucht werden... ^^

    LG
    Christoph :)

  • In der Listbox steht jetzt.

    hugo:08
    wilma:08
    wilma:14

    Ich möchte das z.B der Name wilma erkannt wird, da er schon mit "wilma:08" in der listbox steht und dann "wilma:14" dahinter geschrieben wird.

    So soll es dann aussehen.

    hugo:08
    wilma:08,14

    Müsste jetzt klar sein.

    Gruß
    Wuff

    • Offizieller Beitrag

    Ich möchte das z.B der Name wilma erkannt wird, da er schon mit "wilma:08" in der listbox steht und dann "wilma:14" dahinter geschrieben wird.


    Das ist zwar möglich aber unnütz kompliziert.
    Verwende statt der Listbox ein Listview: NAME | ZEIT_1 | ZEIT_2 | ..ZEIT_n Zeit_n = max. Anzahl an Einträgen
    Dann kannst du problemlos prüfen ob bereits ein Eintrag (Name) für die Person existiert und egänzt um die neue Zeit oder legst halt einen neuen Eintrag an.

  • Moin,
    mit der Listview war eine gute Idee.

    Habe aber noch ein Problem.
    In der offeneZeiten.ini (am Anhang) steht der Schlüssel [hans] sowie der name=hans mit tag=9 und tag=13.
    Es wir aber nur der tag=9 in die Listview übernommen.

    Wie kann ich es in der INI oder imProgramm lösen, daß auch der tag=13 übernommen wird?

    Gruß
    Wuff

    Anhang: offeneZeiten.ini

    [hugo]
    name=hugo
    tag=12
    [hugoline]
    name=hugoline
    tag=11
    [ulla]
    name=ulla
    tag=10
    [hans]
    name=hans
    tag=9
    tag=13

    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Array.au3>
    #include <GuiListView.au3>

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

    $GUI = GUICreate('test', 800, 550, -1, -1)
    $ListView = GUICtrlCreateListView("", 56, 208, 433, 201)
    GUISetState(@SW_SHOW)

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

    ; Fügt die Spalten hinzu
    _GUICtrlListView_InsertColumn($ListView, 0, "Monteur", 100)
    _GUICtrlListView_InsertColumn($ListView, 1, "1", 24)
    _GUICtrlListView_InsertColumn($ListView, 2, "2", 24)
    _GUICtrlListView_InsertColumn($ListView, 3, "3", 24)
    _GUICtrlListView_InsertColumn($ListView, 4, "4", 24)
    _GUICtrlListView_InsertColumn($ListView, 5, "5", 24)
    _GUICtrlListView_InsertColumn($ListView, 6, "6", 24)
    _GUICtrlListView_InsertColumn($ListView, 7, "7", 24)
    _GUICtrlListView_InsertColumn($ListView, 8, "8", 24)
    _GUICtrlListView_InsertColumn($ListView, 9, "9", 24)
    _GUICtrlListView_InsertColumn($ListView, 10, "10", 28)
    _GUICtrlListView_InsertColumn($ListView, 11, "11", 28)
    _GUICtrlListView_InsertColumn($ListView, 12, "12", 28)
    _GUICtrlListView_InsertColumn($ListView, 13, "13", 28)
    _GUICtrlListView_InsertColumn($ListView, 14, "14", 28)
    _GUICtrlListView_InsertColumn($ListView, 15, "15", 28)
    _GUICtrlListView_InsertColumn($ListView, 16, "16", 28)
    _GUICtrlListView_InsertColumn($ListView, 17, "17", 28)
    _GUICtrlListView_InsertColumn($ListView, 18, "18", 28)
    _GUICtrlListView_InsertColumn($ListView, 19, "19", 28)
    _GUICtrlListView_InsertColumn($ListView, 20, "20", 28)
    _GUICtrlListView_InsertColumn($ListView, 21, "21", 28)
    _GUICtrlListView_InsertColumn($ListView, 22, "22", 28)
    _GUICtrlListView_InsertColumn($ListView, 23, "23", 28)
    _GUICtrlListView_InsertColumn($ListView, 24, "24", 28)
    _GUICtrlListView_InsertColumn($ListView, 25, "25", 28)
    _GUICtrlListView_InsertColumn($ListView, 26, "26", 28)
    _GUICtrlListView_InsertColumn($ListView, 27, "27", 28)
    _GUICtrlListView_InsertColumn($ListView, 28, "28", 28)
    _GUICtrlListView_InsertColumn($ListView, 29, "29", 28)
    _GUICtrlListView_InsertColumn($ListView, 30, "30", 28)
    _GUICtrlListView_InsertColumn($ListView, 31, "31", 28)

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

    $monteurname = IniReadSectionNames(@ScriptDir & "\ini\offeneZeiten.ini"); Alle Sektionen aus Monteur.ini auslesen!
    ;~ _Arraydisplay($monteurname)
    _ArraySort($monteurname, 0, 1, 0)
    _ArrayDisplay($monteurname)

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

    For $i = 1 To $monteurname[0]
    $nameR = IniRead(@ScriptDir & "\ini\offeneZeiten.ini", $monteurname[$i], "name", "")
    MsgBox(0, "", $nameR)
    $monteurnameR = IniReadSection(@ScriptDir & "\ini\offeneZeiten.ini", $monteurname[$i])
    $tagR = IniRead(@ScriptDir & "\ini\offeneZeiten.ini", $monteurname[$i], "tag", "")
    MsgBox(0, "", $tagR)

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

    $index = _GUICtrlListView_AddItem($ListView, $nameR, $monteurname[$i])
    _GUICtrlListView_AddSubItem($ListView, $index, $tagR, $tagR)

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

    Next

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]