Sign in to follow this  
Followers 0
Sylo

Creating First Program With Autoit

13 posts in this topic

#1 ·  Posted (edited)

Ok, what I am trying to do is create a program to take an input and then search a text file for this input. Now I have searched the forums but with no luck of finding something close to what I am trying to do. The lines in the text file look something like this:

"10 ","9781870471626","9781870471626","Stress P/bk ",""

Now I would like to set this up to either search by "9781870471626" or "Stress P/bk" and then get back the first number in that line "10" which is the ID am trying to find. To give an idea how I have been going about this here is what I have done so far. First I took the text file and read to an array. Then created a input box for the use to put in what they are searching for. Then I do an _ArraySearch to see if what they put in was found or not. Please keep in mind I am very new to this and I know this is most likely completely wrong way to go about doing this task.

My Code:

#include <GUIConstantsEx.au3>
#include <file.au3>
#include <Array.au3>

Opt('MustDeclareVars', 1)

Global $itemsFile
Global $lineRead
Global $itemArray
Global $userInput
Global $itemOutput

_FileReadToArray(C:\Test_items.txt", $itemArray)

$userInput = InputBox("Enter Item","Please Enter The Item Number","")
        If $userInput = "" then
            MsgBox(0,"Empty", "Nothing Entered, Closing Program",3)
        EndIf

$itemOutput = _ArraySearch($itemArray, $userInput)
    if $itemOutput = -1 Then
        MsgBox(0,"Not Found","Could Not Find Item")
    Else
        if $itemOutput = 1 Then
        MsgBox(0,"Item Found","Output goes here!")
        EndIf
    EndIf

    
Exit
Edited by Sylo

Share this post


Link to post
Share on other sites



This should do the trick....

#include <GUIConstantsEx.au3>
#include <file.au3>
#include <Array.au3>

Opt('MustDeclareVars', 1)

Global $itemsFile
Global $lineRead
Global $itemArray
Global $userInput
Global $itemOutput
Global $Split, $return = ""

_FileReadToArray("C:\Test_items.txt", $itemArray)

$userInput = InputBox("Enter Item", "Please Enter The Item Number", "")
If $userInput = "" Then
    MsgBox(0, "Empty", "Nothing Enter, Closing Program", 3)
    Exit
EndIf

For $x = 1 To UBound($itemArray) - 1
    
    $Split = StringSplit($itemArray[$x], ",")
    
    If StringInStr($itemArray[$x], $userInput) Then
        $return &= $Split[1] & @CRLF ; return is 1st number
        ; ExitLoop ; use this if you ONLY want the first match
    EndIf
Next


If $return <> "" Then
    MsgBox(0, "Item(s) Found", $return)
Else
    MsgBox(0, "Empty", "Nothing Enter, Closing Program", 3)
EndIf

8)

***** not tested

8)


NEWHeader1.png

Share this post


Link to post
Share on other sites

#3 ·  Posted (edited)

This should do the trick....

#include <GUIConstantsEx.au3>
#include <file.au3>
#include <Array.au3>

Opt('MustDeclareVars', 1)

Global $itemsFile
Global $lineRead
Global $itemArray
Global $userInput
Global $itemOutput
Global $Split, $return = ""

_FileReadToArray("C:\Test_items.txt", $itemArray)

$userInput = InputBox("Enter Item", "Please Enter The Item Number", "")
If $userInput = "" Then
    MsgBox(0, "Empty", "Nothing Enter, Closing Program", 3)
    Exit
EndIf

For $x = 1 To UBound($itemArray) - 1
    
    $Split = StringSplit($itemArray[$x], ",")
    
    If StringInStr($itemArray[$x], $userInput) Then
        $return &= $Split[1] & @CRLF ; return is 1st number
        ; ExitLoop ; use this if you ONLY want the first match
    EndIf
Next


If $return <> "" Then
    MsgBox(0, "Item(s) Found", $return)
Else
    MsgBox(0, "Empty", "Nothing Enter, Closing Program", 3)
EndIf

8)

***** not tested

8)

For $x = 1 To UBound($itemArray) - 1
    
    $Split = StringSplit($itemArray[$x], ",")
    
    If StringInStr($itemArray[$x], $userInput) Then
        $return &= $Split[1] & @CRLF; return is 1st number
      ; ExitLoop; use this if you ONLY want the first match
    EndIf
Next

If you could can you please explain what this does. I looked in the help file and am still a bit confused on how this works. Also to make it so that after the item found and they hit ok, to make iit go back to the inputbox, would i make it one big While loop? same if it is not found?

p.s. I will test it right now...thanks for the help!

Edited by Sylo

Share this post


Link to post
Share on other sites

It works so far...just want to thank you for your help. Was I that far off? Or was I going in the right direction?

Share this post


Link to post
Share on other sites

I have another question for you. I am trying to take output it get when i search for an item and display it in a list. This way I can show all parts of it and not just the company. I looked at using GUICtrlListVeiw and see if that can help me. But I can't seem to get it to work.

Code:

For $x = 1 To UBound($itemArray) - 1
   
    $Split = StringSplit($itemArray[$x], ",")
   
    If StringInStr($itemArray[$x], $userInput) Then
        $return &= $Split[1] & @CRLF ;returns the company number (the first number in the line)
    ;ExitLoop
    EndIf
Next

GUICreate("Test",420,250, 100,400,-1)

$listview = GUICtrlCreateListView("Company|Item Number|ISBN              ",10,10,400,150);,$LVS_SORTDESCENDING)
$listview_ctrl = GUICtrlCreateListViewItem($Split[1] & "|" & $Split[2] & "|" & $Split[3] & "|" & $Split[4], $listview)

if $return <> "" Then
    MsgBox(0,"Item(s) Found", GUICtrlRead($listview))
Else
    MsgBox(0, "Item Not Found", "Not Found, Closing Program", 3)
EndIf

Share this post


Link to post
Share on other sites

#6 ·  Posted (edited)

Use/Try _ArrayDisplay()

8)

Wait,,,,,

Edited by Valuater

NEWHeader1.png

Share this post


Link to post
Share on other sites

Use/Try _ArrayDisplay()

8)

Wait,,,,,

Because some times if the use enters in a part of a title of a book instead of the whole thing there might be more then 1 book with similar title. This way i can show them then they can choose the one that best fits the book they are trying to find the company for.

Share this post


Link to post
Share on other sites

because YOU are trying!....

#include <GUIConstantsEx.au3>
#include <file.au3>
#include <Array.au3>

Opt('MustDeclareVars', 1)

Global $itemsFile
Global $lineRead
Global $itemArray
Global $userInput
Global $itemOutput
Global $Split, $return = "", $GUI, $listview

_FileReadToArray("C:\Test_items.txt", $itemArray)

$userInput = InputBox("Enter Item", "Please Enter The Item Number", "")
If $userInput = "" Then
    MsgBox(0, "Empty", "Nothing Enter, Closing Program", 3)
    Exit
EndIf

For $x = 1 To UBound($itemArray) - 1
    
    $Split = StringSplit($itemArray[$x], ",")
    
    If StringInStr($itemArray[$x], $userInput) Then
        $return &= $Split[1] & @CRLF ; return is 1st number
        DisplayAdd($Split)
        ; ExitLoop ; use this if you ONLY want the first match
    EndIf
Next


If $return <> "" Then
    MsgBox(0, "Item(s) Found", $return)
Else
    MsgBox(0, "Empty", "Nothing Enter, Closing Program", 3)
EndIf


; Functions --------------------------------

Func DisplayAdd($Spliter)
    
    Local $listview_ctrl
    
    If Not IsHWnd($GUI) Then
        $GUI = GUICreate("Test", 420, 250, 100, 400, -1)
        $listview = GUICtrlCreateListView("Company|Item Number|ISBN                 ", 10, 10, 400, 150);,$LVS_SORTDESCENDING)
        $listview_ctrl = GUICtrlCreateListViewItem($Spliter[1] & "|" & $Spliter[2] & "|" & $Spliter[3] & "|" & $Spliter[4], $listview)
        GUISetState()
    Else
        $listview_ctrl = GUICtrlCreateListViewItem($Spliter[1] & "|" & $Spliter[2] & "|" & $Spliter[3] & "|" & $Spliter[4], $listview)
    EndIf

EndFunc   ;==>DisplayAdd

*** not tested

8)


NEWHeader1.png

Share this post


Link to post
Share on other sites

Thanks again....wish I didn't have to bug you so much for this...just having a hard time getting started with this stuff....

Share this post


Link to post
Share on other sites

Thanks again....wish I didn't have to bug you so much for this...just having a hard time getting started with this stuff....

That's really OK!

we like helping people who want to help themselves. Some just want to order a program and take advantage of our free help.

8)


NEWHeader1.png

Share this post


Link to post
Share on other sites

#11 ·  Posted (edited)

That's really OK!

we like helping people who want to help themselves. Some just want to order a program and take advantage of our free help.

8)

Ok one more question!!

I am now trying to make it so I can have more then just the first thing matching the search. Here is example text file the program is searching:

"53 ","2499","","PAINTER 5 WOW! ",""

"53 ","2572PP0321205472","","ADOBE ENCORE DVD CIAB DISCONTI",""

"53 ","2671IN0741427206","","THE RADIO FUNNY BOOK ",""

"53 ","2777EL0240806336","","PHOTOSHOP FOR DIGITAL VIDEO ",""

"53 ","2900AD0790611368","","SIMPLIFYING DIGITAL SIGNAL PRO",""

"53 ","2991CP1578202604","","INSTANT VEGAS 5 ",""

"53 ","3830","","B'CASTERS LAW & REG CONFERENCE",""

"53 ","2777EL0240806336","","PHOTOSHOP FOR DIGITAL VIDEO TEST 1 ",""

"53 ","2777EL0240806336","","PHOTOSHOP FOR DIGITAL VIDEO TEST 2 ",""

"53 ","2777EL0240806336","","PHOTOSHOP FOR DIGITAL VIDEO TEST 3 ",""

Notice there are multiple items with similar numbers. I am trying to make it so that it brings up all the ones meeting the search.

Code:

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


Opt('MustDeclareVars', 1)

Global $itemArray
Global $userInput
Global $itemOutput
Global $Split 
Global $return = ""
Global $listview
Global $GUI
Global $listview_ctrl
Global $lastline

_FileReadToArray("C:\List_Test.txt", $itemArray);reads the file into the array


$userInput = InputBox("Enter Item", "Please Enter The ISBN Number or Title of Book", "")

If $userInput = "" Then;just checks to make sure something is entered into the input box
    MsgBox(0, "Empty", "Nothing Entered, Closing Program", 3)
    Exit
EndIf

For $x = 1 To UBound($itemArray) - 1
   
    $Split = StringSplit($itemArray[$x], ",");how the line is broke down
   
    If StringInStr($itemArray[$x], $userInput) Then
        $return = $Split[1] & @CRLF;returns the company number (the first number in the line)
        DisplayAdd($Split)
        ExitLoop
    EndIf
Next

Func DisplayAdd($Split);creates the output into a list
   
    Local $listview_ctrl
    Local $button1
    Local $msg
    
While 1
    $msg = GUIGetMsg()
    
    If Not IsHWnd($GUI) Then;checks to make sure $GUI is a valid window
      ;MsgBox(0,"Testing to see if this works!!", $GUI,3)
        $GUI = GUICreate("Items Found",420,250,275,275,-1)
        $listview = GUICtrlCreateListView("Company|Item Number|ISBN|Title", 10, 10, 400, 150)
        $listview_ctrl = GUICtrlCreateListViewItem($Split[1] & "|" & $Split[2] & "|" & $Split[3] & "|" & $Split[4], $listview)
        $button1 = GUICtrlCreateButton ("Close", 160, 205, 70, 20)
        GUISetState()
    
    EndIf

    Do
;MsgBox(0,"Getting to the DO statement", $EOF,3)
        $Split = StringSplit($itemArray[$x], ",")   
        $listview_ctrl = GUICtrlCreateListViewItem($Split[1] & "|" & $Split[2] & "|" & $Split[3] & "|" & $Split[4], $listview)
    Until 
     
    Select
        Case $msg = $GUI_EVENT_CLOSE
            ExitLoop
        Case $msg = $button1
            ExitLoop
    EndSelect
WEnd

EndFunc ;==>DisplayAdd
Edited by Sylo

Share this post


Link to post
Share on other sites

I'm wondering is using SQL may be a better way to go on this. Look at the SQlite section in the User Defined Functions area of the helpfile.

Thanks, I will check that out.

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