Sign in to follow this  
Followers 0
cloq

Help with csv and combobox

3 posts in this topic

Hello,

I am quite the newbie with arrays and stringsplits. I have copied and played with random bits of code from various authors and scripters here on this forum (Thank you!).

I am trying out a script that reads titles from a csv file (book.csv), populates a combobox with titles, and when a title is selected (by choosing and clicking ok) the user will get basic info about publisher name, title, and pages.

I am trying to put a variable to (one for each), publisher, title and pages. So when the user clicks ok, based on the title picked, msgbox = var1 + var2 + var3.

Any help would be appreciated.

Here is my current progress:

Pub, Title, Pages
Harper, Title01, 111
Coby, Title02, 222
Tor, Title03, 333
Random, Title04, 444

#include <GUIConstants.au3>
#include <File.au3>
Global $in_filename
$in_filename = "book.csv"
Dim $lines,$Display, $NumCols
_FileReadToArray($in_filename, $lines)
$Columns = StringSplit($lines[1], ",")
$NumCols=$Columns[1]
Dim $array[ $lines[0] ][ $Columns[0] ]
For $i = 1 To $lines[0]
    $Columns = StringSplit($lines[$i], ",")
    If $Columns[0] = 1 Then Continueloop
    For $j = 1 To $Columns[0]
        $array[$i-1][$j-1] = $Columns[$j]
    Next
Next
$Rows=$Lines[0]-1

Global $ColumnA, $AllColumnA
$M = 1
While $M <= $Rows -1
    $ColumnA=$Array[$m][1] & "|"
    $M = $M + 1
    $AllColumnA=$AllColumnA & $ColumnA
Wend

_Content()

Func _Content()

Global $menu1, $n1, $n2, $msg, $menustate, $menutext
Global $Brand

GUICreate("Test",400,200,-1,-1)
$n1 = GUICtrlCreateCombo("", 10,10,100)
GUICtrlSetData(-1,$AllColumnA)

$n2 = GUICtrlCreateButton("Read", 10, 110, 50)
    GUICtrlSetState(-1, $GUI_FOCUS)
GUISetState ()

Do
        $msg = GUIGetMsg()
        Select
            Case $msg = $n2
            $Brand = GUICtrlRead($n1)

            MsgBox(0, "BookInfo", $Brand)
        EndSelect
    Until $msg = $GUI_EVENT_CLOSE
    Exit

EndFunc

Share this post


Link to post
Share on other sites



I kept a little bit of your code - here is the working result:

#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <File.au3>
#include <Array.au3>

Global $in_filename
$in_filename = "book.csv"
Dim $lines,$Display, $ComboText = ""
_FileReadToArray($in_filename, $lines)
$Columns = StringSplit($lines[1], ",")
Dim $MemARRAY [$lines[0]+1][$Columns[0]+1]
For $i = 1 To $lines[0]             ;$MemARRAY [1][1] = "Pub", $MemARRAY [1][2] = "Title", $MemARRAY [1][3] = "Pages"  
    $Columns = StringSplit($lines[$i], ",")
    If $i <> 1 Then $ComboText &= $Columns[1]&"|"       ;prepare the string to fill the combo (skip the header)
    For $j = 1 To $Columns[0]
        $MemARRAY [$i][$j] = StringStripWS($Columns[$j], 3)
    Next
Next

Opt("GUIOnEventMode", 1)
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("Form1", 217, 151, 192, 124)
GUISetOnEvent($GUI_EVENT_CLOSE, "Form1Close")
$Combo1 = GUICtrlCreateCombo("", 8, 24, 201, 25)
GUICtrlSetData(-1, $ComboText, "")
GUICtrlSetOnEvent(-1, "Combo1Change")
$Label1 = GUICtrlCreateLabel("", 8, 56, 196, 81, $WS_BORDER)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
    Sleep(100)
WEnd

Func Combo1Change()
    If GUICtrlRead($Combo1) <> "" Then
        GUICtrlSetData($Label1, "")
        MsgBox(0, "", GUICtrlRead($Combo1))
        Local $idx = _ArraySearch($MemARRAY, GUICtrlRead($Combo1), 0, 0, 0, 0, 1, 1)
        If @error Then
            MsgBox(16, "Error", "Can't find value")
            Exit
        EndIf
        Local $FinalMessage = $MemARRAY[1][1]&": "&$MemARRAY [$idx][1]&@CRLF & _
                            $MemARRAY[1][2]&": "&$MemARRAY [$idx][2]&@CRLF & _
                            $MemARRAY[1][3]&": "&$MemARRAY [$idx][3]&@CRLF
        GUICtrlSetData($Label1, $FinalMessage)
    Else
        Return
    EndIf
EndFunc
Func Form1Close()
    Exit
EndFunc

It is up to you to adapt this example to suit your code - I've noticed you have used #include <GUIConstants.au3> - maybe it is time for you to upgrade your AutoIt to at least 3.3 ?


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

It is up to you to adapt this example to suit your code - I've noticed you have used #include <GUIConstants.au3> - maybe it is time for you to upgrade your AutoIt to at least 3.3 ?

Awesome! This seems to be what I was trying to accomplish without the know how (ended up with a headache instead but learned a few other things in the process). Just upgraded my Autoit too. Thank you.

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  
Followers 0