Stringauswertung

  • Ich habe 21 Checkboxen.
    Jenachdem, welche gecheckt wurde wird ein String erstellt.
    Wurde die 1Checkbox gewählt sieht der String so aus: 100000000000000000000
    Wurde die 4te, 5te, 8te und die letzte Checkbox gewählt erscheint an 4ter, 5ter, 8ter und letzter Stelle eine 1 ---> 000110010000000000001, dann läuft das Script weiter und arbeitet die 1en ab.
    Das habe ich geschafft, was ich aber jetzt nicht schaffe (mich doof stelle) ist, dass ich auf einen besonderen Fall reagieren möchte.
    Und zwar:
    Sobald mindestens eine der Stellen 2-6 eine 1 hat, passiert was anderes. (ich möchte auf eine IF-Anweisung hinaus)
    Aber dabei ist es egal, ob die anderen Stellen eine 1 haben oder nicht. Es muss nur unterschieden werden, ob und welche von den Stellen 2-6 eine 1 haben.

    Vielen Dank für eure Ideen usw.
    Xethria

    EDIT: gelöst

    Einmal editiert, zuletzt von Xethria (15. Januar 2009 um 14:41)

  • Okay, werde ich schauen. Auch wenn ich jetzt vielleicht davon absehe, hätte ich trotzdem gern gewusst, wie ich an so eine Selektion eines Strings rangehe. Irgendwann stolper ich wieder drüber. :rolleyes:

    • Offizieller Beitrag

    Da die Fragen dazu häufig sind, hatte ich mal ein Muster erstellt:

    Spoiler anzeigen
    [autoit]

    ; Muster Checkbox-Bearbeitung
    ; Ziel: einfache Abfrage, welche CB aktiviert sind

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

    #include <GUIConstants.au3>
    Opt('GUIOnEventMode', 1)
    Opt("MustDeclareVars", 1)
    Global $bCheckAll, $bUnCheckAll, $GUI, $i, $str
    Global $arCB[20][2] ; Array für Handle und Dual-Wert der CB
    For $i = 0 To UBound($arCB) -1
    $arCB[$i][1] = 2^$i ; Zuweisung eindeutiger Wert
    Next
    Global $Checked = 0 ; Variable nimmt Status ALLER Checkboxen in einem Wert auf,
    ; Startstatus für alle: UNCHECKED
    Global $w = 500, $h = 20*30+40, $l = (@DesktopWidth-$w)/2, $t = (@DesktopHeight-$h)/2
    Global $top = -10
    $GUI = GUICreate('Test Checkbox', $w, $h, $l, $t)
    GUISetOnEvent($GUI_EVENT_CLOSE, '_Ende')
    For $i = 0 To UBound($arCB) -1
    $top += 30
    $arCB[$i][0] = GUICtrlCreateCheckbox('CheckBox_' & $i+1, 40, $top, 120)
    GUICtrlSetOnEvent(-1, '_ClickCB')
    Next
    $bCheckAll = GUICtrlCreateButton('Alle markieren', 250, 20, 150, 21)
    GUICtrlSetOnEvent(-1, '_CheckAll')
    $bUnCheckAll = GUICtrlCreateButton('Markierung aufheben', 250, 50, 150, 21)
    GUICtrlSetOnEvent(-1, '_UnCheckAll')
    GUISetState()

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

    While 1
    Sleep(100)
    WEnd

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

    Func _Ende()
    Exit
    EndFunc

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

    Func _ClickCB()
    For $i = 0 To UBound($arCB) -1
    If $arCB[$i][0] = @GUI_CtrlId Then
    $Checked = BitXOR($Checked, $arCB[$i][1])
    ExitLoop
    EndIf
    Next
    _ReadCB()
    EndFunc

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

    Func _CheckAll()
    For $i = 0 To UBound($arCB) -1
    If Not BitAND($Checked, $arCB[$i][1]) Then
    GUICtrlSetState($arCB[$i][0], $GUI_CHECKED)
    $Checked = BitXOR($Checked, $arCB[$i][1])
    EndIf
    Next
    _ReadCB()
    EndFunc

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

    Func _UnCheckAll()
    For $i = 0 To UBound($arCB) -1
    If BitAND($Checked, $arCB[$i][1]) Then
    GUICtrlSetState($arCB[$i][0], $GUI_UNCHECKED)
    $Checked = BitXOR($Checked, $arCB[$i][1])
    EndIf
    Next
    _ReadCB()
    EndFunc

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

    Func _ReadCB() ; Fkt. dient nur zur Ausgabe, welche CB markiert sind
    Local $str = 'Markiert: '
    For $i = 0 To UBound($arCB) -1
    If BitAND($Checked, $arCB[$i][1]) Then $str &= $i+1 & ', '
    Next
    WinSetTitle($GUI, '', StringTrimRight($str, 2))
    EndFunc

    [/autoit]
  • [autoit]

    StringTrimLeft ( "string", 1 )
    StringTrimRight ( "string", 7 )
    StringSplit ( "string", "" )
    Select
    Case splitted[1]=1
    statement1
    Case splitted[2]=1
    statement2
    ......................................
    Case Else ;2bis6 sind 0
    statementN
    ...
    EndSelect

    [/autoit]

    Einmal editiert, zuletzt von mehrsolala (14. Januar 2009 um 14:24)

  • Danke. Wenn man das so liest wirkt es immer leichter als es ist, wenn man nirgends "spicken" kann. 8|

  • Naja ich les mir auch bloß deine/eure Anforderungen durch, überlege mir was das Programm machen muss und suche mir aus den Funktionen eine raus die genau das kann und kuck mir deren Erklärung und Beispiele an um zu sehen wie ich sie anwenden muss.