Sign in to follow this  
Followers 0
Das Ami

[Solved] Condition never matches

3 posts in this topic

#1 ·  Posted (edited)

Hi AutoIT Community

I'm trying to make a program that will behave similar like google's search suggestion:

I load a text file containing words, enter the first letter of the word I am looking for into the Inputbox and it deletes all words that don't match from the array.

My condition

If Not StringLeft($arr[$x], StringLen($i))=$i Then
never matches though. What am I doing wrong?

#include <Array.au3>
#include <File.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
$Form1 = GUICreate("Form1", 356, 60, 192, 114)
$Input1 = GUICtrlCreateInput("", 8, 8, 329, 21)
$Label1 = GUICtrlCreateLabel("0", 8, 40, 36, 17)
GUISetState(@SW_SHOW)

HotKeySet("{PAUSE}", "debug")

Dim $arr
_FileReadToArray("e.txt", $arr)
_ArrayDisplay($arr)

Func debug()
    _ArrayDisplay($arr)
EndFunc

Func check($i)
    For $x = 1 to $arr[0]
        If Not StringLeft($arr[$x], StringLen($i))=$i Then
            _ArrayDelete($arr, $x-1)
            $arr[0]=UBound($arr)
        EndIf
    Next
    GUICtrlSetData($Label1, $arr[0])
EndFunc

While 1
    Sleep(10)
    If Not GUICtrlRead($Input1)="" Then
        check($i)
    EndIf
WEnd
Edited by Das Ami

Share this post


Link to post
Share on other sites



I rearranged your script a bit - now it works for me. The only remaning problem is that you have to hit the enter key after each letter.

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

HotKeySet("{PAUSE}", "debug")

Dim $arr
_FileReadToArray("e.txt", $arr)
_ArrayDisplay($arr)

Global $i
$Form1 = GUICreate("Form1", 356, 60, 192, 114)
$hInput1 = GUICtrlCreateInput("", 8, 8, 329, 21)
$hLabel1 = GUICtrlCreateLabel("0", 8, 40, 36, 17)
GUISetState()

While 1
    $msg = GUIGetMsg()
    Select
        Case $msg = $GUI_EVENT_CLOSE
            Exit
        Case $msg = $hInput1
            $sInput1 = GUICtrlRead($hInput1)
            If $sInput1 <> "" Then check($sInput1)
    EndSelect
WEnd

Func debug()
    _ArrayDisplay($arr)
EndFunc

Func check($i)
    For $x = $arr[0] To 1 Step -1
    If StringLeft($arr[$x], StringLen($i)) <> $i Then
    _ArrayDelete($arr, $x)
    $arr[0]=UBound($arr)-1
    EndIf
    Next
    GUICtrlSetData($hLabel1, $arr[0])
EndFunc

My UDFs and Tutorials:

Spoiler

UDFs:
Active Directory (NEW 2017-04-18 - Version 1.4.8.0) - Download - General Help & Support - Example Scripts - Wiki
OutlookEX (NEW 2017-02-27 - Version 1.3.1.0) - Download - General Help & Support - Example Scripts - Wiki
ExcelChart (2015-04-01 - Version 0.4.0.0) - Download - General Help & Support - Example Scripts
Excel - Example Scripts - Wiki
Word - Wiki
PowerPoint (2015-06-06 - Version 0.0.5.0) - Download - General Help & Support

Tutorials:
ADO - Wiki

 

Share this post


Link to post
Share on other sites

Nice! ;) Thanks water.

I'm sure I'll be able to get it automated again myself.

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