Jump to content

array vs loop is this possible


Recommended Posts

i have a file flower.txt with the name of the flowers and there picture location and information about that kind of flower. i wana cerat a gui that will display the flower picture and it information 

here is the script 

#include <Misc.au3>
#include <EditConstants.au3>
#include <Constants.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <MsgBoxConstants.au3>
#include <WindowsConstants.au3>
#include <AVIConstants.au3>
#include <TreeViewConstants.au3>
#include <GuiComboBox.au3>
#include <GuiTab.au3>
#include <file.au3>
#include <array.au3>

Global $sfPath = 'flowers.txt'
Global $aFlowers
_FileReadToArray($sfPath,$aFlowers,$FRTA_NOCOUNT,'|')
_ArrayColDelete($aFlowers,0) ;row 0 has no data so deleting

$Form1 = GUICreate("Search Flower Name",320, 480)
$input = GUICtrlCreateInput("", 60, 360, 209, 25)
$idss = GUICtrlCreateButton("Search", 130, 400, 73, 65)

GUISetState(@SW_SHOW)




Func Searchf()



Global $Fname = GUICtrlRead($input)


        For $iNo = 0 To UBound($aFlowers[0][0]) - 1 ;

           if $Fname = $aFlowers[$iNo][0] then

MsgBox($MB_SYSTEMMODAL, "","Flower nfo", ""& $aFlowers[$iNo][1] &"")

pic()

EndIf
        Next

EndFunc

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

            Exit
         Case $nMsg = $idss

        Searchf()

    EndSwitch
 WEnd

func pic()
   For $iNo = 0 To UBound($aFlowers[0][0]) - 1
   GUICtrlCreatePic($aFlowers[$iNo][2], 20, 30, 280, 280)
    Next
   EndFunc

here is the flower.txt file

|Hibiscus|Hibiscus is a hardy perennial which grows in variety of colors, sizes and fragrances. Actually they are tropical flowers which require ample sunlight and moisture to grow well. These flowers start blooming in late spring and continuously bloom through July and August.|C:\T-in\IMG\2.jpg
|Lilies|There are different types of lily flowers which bloom in August including water lilies, tiger lilies and gold band lilies. Tiger lilies generate orange flowers having black spots. This lily blooms in delayed July and beginning of August. Gold band lily produce exotic white blooms. All varieties of lilies need enough space to grow and protection from summer sun.|C:\T-in\IMG\1.jpg
|Turtlehead|Growing in humid areas, turtleheads are small flowers which bloom from July to September. They mostly produce flowers of white and pink color.|C:\T-in\IMG\3.jpg
|Hydrangea|These are ever green bushes which produce flowers in different colors including white, purple, blue and pink. They are easy to grow bushes and can grow 3 to 10 feet tall. They require morning sun to grow but they should be protected from noon and afternoon sun.|C:\T-in\IMG\4.jpg
|Dahlias|August proves to be the peak blooming season for dahlias. Dahlias come in colors like white, orange, yellow, red and purple. They can tolerate all types of soil and require full sun to grow.|C:\T-in\IMG\5.jpg

am still trying to learn about how the ubound work and the _filereadtoarray

Link to comment
Share on other sites

#include <Array.au3>

Local $sPath = 'flowers.txt'
Local $hPath = FileOpen($sPath)
If $hPath = -1 Then Exit

Local $aFlowers = StringSplit(StringTrimLeft(FileRead($hPath), 1), "|", 2)
FileClose($hPath)

_ArrayDisplay($aFlowers)

For $x = 0 To UBound($aFlowers) - 1 Step 3
    MsgBox(0, "NAME", $aFlowers[$x])
Next
For $x = 1 To UBound($aFlowers) - 1 Step 3
    MsgBox(0, "DESCRIPTION", $aFlowers[$x])
Next
For $x = 2 To UBound($aFlowers) - 1 Step 3
    MsgBox(0, "IMAGE", $aFlowers[$x])
Next
For $x = 0 To UBound($aFlowers) - 1
    If $aFlowers[$x] = "Hibiscus" Then
        MsgBox(0, "NAME", $aFlowers[$x])
        MsgBox(0, "DESCRIPTION", $aFlowers[$x + 1])
        MsgBox(0, "IMAGE", $aFlowers[$x + 2])
        ExitLoop
    EndIf
Next

Study it, isn't so hard.

Edited by Terenz

Nothing is so strong as gentleness. Nothing is so gentle as real strength

 

Link to comment
Share on other sites

You were really close, keep up the good work!

 

All problems I have comments on. This should work. Let me know!

 

#include <Misc.au3>
#include <EditConstants.au3>
#include <Constants.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <MsgBoxConstants.au3>
#include <WindowsConstants.au3>
#include <AVIConstants.au3>
#include <TreeViewConstants.au3>
#include <GuiComboBox.au3>
#include <GuiTab.au3>
#include <file.au3>
#include <array.au3>

Global $sfPath = 'flowers.txt'
Global $aFlowers, $FlowerFound = 0 ; Added in a global variable that you can assign if when searching the flower is in the Flower.txt so you can alert the user no data was found.
_FileReadToArray($sfPath, $aFlowers, $FRTA_NOCOUNT, '|')
_ArrayColDelete($aFlowers, 0) ;row 0 has no data so deleting

$Form1 = GUICreate("Search Flower Name", 320, 480)
$input = GUICtrlCreateInput("", 60, 360, 209, 25)
$idss = GUICtrlCreateButton("Search", 130, 400, 73, 65)

GUISetState(@SW_SHOW)




Func Searchf()


    Global $Fname = GUICtrlRead($input)



    For $iNo = 0 To UBound($aFlowers) - 1 ; You do not add [0][0] to a Ubound since its searching the entire Array already it just requires the Array Name.


        If $Fname = $aFlowers[$iNo][0] Then

            MsgBox(0, "Flower Info", $aFlowers[$iNo][1]) ; Shortened this up for cleaner look IMO.
            $FlowerFound = 1 ; Assigned a 1 to the FlowerFound so you can detect if the flower is in the Flowers.txt

            pic()

        Else

        EndIf
    Next

    If $FlowerFound = 0 Then ; Error handling to let the user know the flower is not located in the Flower.txt
        MsgBox(48, "Error", "No flower found in database!")
    EndIf

    $FlowerFound = 0 ; Reassign FlowerFound to 0 so next search it can detect if its not found or found again

EndFunc   ;==>Searchf

Func pic()
    For $iNo = 0 To UBound($aFlowers) - 1 ; Same principle as above, only the Array Name is needed. 
        GUICtrlCreatePic($aFlowers[$iNo][2], 20, 30, 280, 280)
    Next
EndFunc   ;==>pic

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

            Exit
        Case $idss ; You just need the ID of the Control, not the GuiGetMsg info. You were close!

            Searchf()

    EndSwitch
WEnd

 

MCR.jpg?t=1286371579

Most recent sig. I made

Quick Launcher W/ Profiles Topic Movie Database Topic & Website | LiveStreamer Pro Website | YouTube Stand-Alone Playlist Manager: Topic | Weather Desktop Widget: Topic | Flash Memory Game: Topic | Volume Control With Mouse / iTunes Hotkeys: Topic | Weather program: Topic | Paws & Tales radio drama podcast mini-player: Topic | Quick Math Calculations: Topic

Link to comment
Share on other sites

I made some changes to @Damein script:

#include <Misc.au3>
#include <EditConstants.au3>
#include <Constants.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <MsgBoxConstants.au3>
#include <WindowsConstants.au3>
#include <AVIConstants.au3>
#include <TreeViewConstants.au3>
#include <GuiComboBox.au3>
#include <GuiTab.au3>
#include <file.au3>
#include <array.au3>

Global $sfPath = 'flowers.txt'
Global $idPic=-99               ;<== placeholder PicControlID
Global $aFlowers
; $FlowerFound = 0 ; Added in a global variable that you can assign if when searching the flower is in the Flower.txt so you can alert the user no data was found.
;<== moved in local scope
_FileReadToArray($sfPath, $aFlowers, $FRTA_NOCOUNT, '|')
_ArrayColDelete($aFlowers, 0) ;row 0 has no data so deleting

$Form1 = GUICreate("Search Flower Name", 320, 480)
$input = GUICtrlCreateInput("", 60, 360, 209, 25)
$idss = GUICtrlCreateButton("Search", 130, 400, 73, 65)

GUISetState(@SW_SHOW)

Func Searchf()
    Local $Fname = GUICtrlRead($input)  ;<== use local scope
    Local $FlowerFound                  ;<== 
    For $iNo = 0 To UBound($aFlowers) - 1 ; You do not add [0][0] to a Ubound since its searching the entire Array already it just requires the Array Name.

        If $Fname = $aFlowers[$iNo][0] Then
            MsgBox(0, "Flower Info", $aFlowers[$iNo][1]) ; Shortened this up for cleaner look IMO.
            $FlowerFound = 1 ; Assigned a 1 to the FlowerFound so you can detect if the flower is in the Flowers.txt
            pic($aFlowers[$iNo][2]) ;<== calling func with path from pic
            ExitLoop ;<== allready found so search is ended
            ;Else                       ;<==
        EndIf
    Next

    If $FlowerFound = 0 Then ; Error handling to let the user know the flower is not located in the Flower.txt
        MsgBox(48, "Error", "No flower found in database!")
    EndIf

    ;$FlowerFound = 0 ; ;<== no need in local scope
EndFunc   ;==>Searchf

Func pic($sPicPath)
    If $idPic<>-99 Then GUICtrlDelete($idPic)
    $idPic=GUICtrlCreatePic($sPicPath, 20, 30, 280, 280)
EndFunc   ;==>pic

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

            Exit
        Case $idss ; You just need the ID of the Control, not the GuiGetMsg info. You were close!

            Searchf()

    EndSwitch
WEnd

my added comments begin with ;<== and my changes are based on my thinking each flowername is only once in the file.

 

Edited by AutoBert
Link to comment
Share on other sites

@Terenz you saved my life . your script was so easy to experiment with  so i could know what i needed to do Thank you

and for @damien your explanation helped me know what are the mistake i had in my script

@AutoBert i cant thank you enough every time am in trouble i found you there for me without you i would have spend moths postponing this project i owe you so much i hope you have a wonderful day 

thanks everyone and here is a happy cat face

happy cat.jpg

Edited by Jcreator
Link to comment
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
 Share

×
×
  • Create New...