Jump to content
Sign in to follow this  
Mikki

StringSplit and arrays

Recommended Posts

Mikki

What I am trying to do is to not only split the words from "$line" but to count each split as well. Hope you understand.

I have a combo-box with a list of words in it, and it also gets read. The list is pretty long so i thought I'd make an array to do it for me.

$id =  GUICtrlCreateCombo("example_A", 64, 8, 161, 25)
GUICtrlSetData(-1, "example_B|example_C"
$ITEM = GUICtrlRead($id)

The words from "$line" I am hoping to assign a number to those words without having to manually put them in.

$array = StringSplit($line, "|", 1)
$line = "example_A|example_B|example_C"
            for $i = 1 to $array[0]
                Switch $ITEM
                Case $array[$i]
                        $MAT = $array[0]
                EndSwitch
            Next

Share this post


Link to post
Share on other sites
czardas

I don't understand this. The number of splits is counted automatically, and the total is assigned to the first element of the array (array index = 0). The rest of the strings are assigned to the following elements in the order that they appear in the original full string. The index number of each array element is a count of each substring split as it was created by the function StringSplit.

Edited by czardas

Share this post


Link to post
Share on other sites
Mikki

I understand this :

$array[1] is example_A

$array[2] is example_B

$array[3] is example_C

after the code below is executed.

$array = StringSplit($line, "|", 1)
$line = "example_A|example_B|example_C"

Id like to use the combo-box to select one of these words("example_B"). and when i click a button it reads what us selected in the combo-box and returns What number it was in the list. But i am not sure how to do this task. maybe it is simple but i am not seeing it. Can you please give an example piece of code doing exactly that ?

Edited by Mikki

Share this post


Link to post
Share on other sites
enaiman

You might want to change the order of the statements.

You are splitting something BEFORE you're putting something inside.

Shouldn't be the other way??


SNMP_UDF ... for SNMPv1 and v2c so far, GetBulk and a new example script

wannabe "Unbeatable" Tic-Tac-Toe

Paper-Scissor-Rock ... try to beat it anyway :)

Share this post


Link to post
Share on other sites
Mikki

You might want to change the order of the statements.

You are splitting something BEFORE you're putting something inside.

Shouldn't be the other way??

$array = StringSplit($line, "|", 1)
$line = "example_A|example_B|example_C"
            for $i = 1 to $array[0]
                Switch $ITEM
                Case $array[$i]
                        $MAT = $array[0]
                EndSwitch
            Next

this code above.. it returns the value 258 which is the number of words in the $line on my pc. instead of bringing out the total amount i want it to say what number it is for where that word was...

example_B should give me the value 2

example_C should give me the value 3 etc.

Share this post


Link to post
Share on other sites
czardas

Check out >>> _GUICtrlComboBox_FindStringExact() <<< in the help file. This will return the index value of the searched string in the combo list, if it exists.

Share this post


Link to post
Share on other sites
Malkey

$array = StringSplit($line, "|", 1)
$line = "example_A|example_B|example_C"
            for $i = 1 to $array[0]
                Switch $ITEM
                Case $array[$i]
                        $MAT = $array[0]
                EndSwitch
            Next

this code above.. it returns the value 258 which is the number of words in the $line on my pc. instead of bringing out the total amount i want it to say what number it is for where that word was...

example_B should give me the value 2

example_C should give me the value 3 etc.

Or maybe this.

local $line = "example_A|example_B|example_C"
local $array = StringSplit($line, "|", 1)
local $ITEM = "example_B"

For $i = 1 To $array[0]
    Switch $ITEM
        Case $array[$i]
            $MAT = $i
    EndSwitch
Next
MsgBox(0, "example_B", "index = " & $MAT)

#cs
; Instead of Switch...EndSwitch try:-
If $ITEM == $array[$i] Then $MAT = $i
#ce

Share this post


Link to post
Share on other sites
MvGulik

Mmm. Who needs arrays! (working but somewhat unfinished as I got to go)

#include <GUIConstantsEx.au3>
main()
Func main()
    Local Const $DELIM = '|'
    Local $lWords = 'word1|word2|word3'
    ;; GuiSet
    Local $hGui = GUICreate('Gui')
    Local $iCombo = GUICtrlCreateCombo('dummy', 10, 10)
    GUICtrlSetData(-1, '|' & $lWords)
    GUISetState()
    _GuiWait($iCombo, $lWords, $DELIM)
    ;; cleanup
    GUIDelete($hGui)
EndFunc
Func _GuiWait($iCombo, $lWords, $DELIM)
    Local $iMsg, $sWord, $iID = 0
    While 1
        $iMsg = GUIGetMsg()
        Select
            Case Not $iMsg
            Case $iMsg < 0
                If $iMsg = $GUI_EVENT_CLOSE Then ExitLoop
            Case $iMsg > 0
                $sWord = GUICtrlRead($iCombo)
                DebugOut('$sWord', $sWord) ;### Debug DebugOut.
                $iID = _GetId($sWord, $lWords, $DELIM)
                DebugOut('$iID', $iID) ;### Debug DebugOut.
        EndSelect
    WEnd
EndFunc
Func _GetId($sWord, $lWords, $DELIM)
    ;; prep for StringInString.
    $lWords = $DELIM & $lWords & $DELIM
    $sWord = $DELIM & $sWord & $DELIM
    Local $ipos = StringInStr($lWords, $sWord, 1)
    StringReplace(StringLeft($lWords, $ipos), $DELIM, $DELIM, 0, 1)
    Return @extended
EndFunc

Func DebugOut($1, $2 = '!NuLL!', $iErr = @error, $iExt = @extended, $iLine = @ScriptLineNumber)
    If Not ($2 == '!NuLL!') Then
        If $2 == '' Then $2 = '[EmptyString]'
        ConsoleWrite($iLine & ') ' & $1 & ' = ' & $2 & @CRLF)
    Else
        ConsoleWrite($iLine & ') ' & $1 & @CRLF)
    EndIf
    Return SetError($iErr, $iExt, 0)
EndFunc
OUTPUT:
45) $sWord = word1
47) $iID = 1
45) $sWord = word2
47) $iID = 2
45) $sWord = word3
47) $iID = 3
Edited by iEvKI3gv9Wrkd41u

"Straight_and_Crooked_Thinking" : A "classic guide to ferreting out untruths, half-truths, and other distortions of facts in political and social discussions."
"The Secrets of Quantum Physics" : New and excellent 2 part documentary on Quantum Physics by Jim Al-Khalili. (Dec 2014)

"Believing what you know ain't so" ...

Knock Knock ...
 

Share this post


Link to post
Share on other sites
Mikki

OMG dude you rock Malkey :) Thanks for all your help guys.

_GUICtrlComboBox_FindStringExact()

Not sure how you would use this line of code to give the value in the combo-box a number to it lol. Thanks any way.

this is part of my code :

$id =  GUICtrlCreateCombo("example_01", 64, 8, 161, 25)
GUICtrlSetData(-1, "example_02|example_03|example_04|example_05|example_A|example_B|example_C", "example_02")
$ITEM = GUICtrlRead($id)
Statements()


Func Statements() ;Finds the id that fits the material desciption
$line = "example_01|example_02|example_03|example_04|example_05|example_A|example_B|example_C"  
$array = StringSplit($line, "|", 1)
            for $i = 0 to $array[0]
              If $ITEM == $array[$i] Then $MAT = $i
              Next
EndFunc

And this works "Perfectly now thanks to Malkey ;)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×