Cambo Posted December 17, 2007 Share Posted December 17, 2007 (edited) I have an if statement in my code with too many ORs because I am reading a file for certain lines and reacting a certain way depending on what response I get. What it looks like now is: $lines = FileRead("chat.log") If StringInStr($lines, "a") OR StringInStr($lines, "b") OR StringInStr($lines, "c") OR StringInStr($lines, "d") OR StringInStr($lines, "e") OR StringInStr($lines, "f") OR StringInStr($lines, "g") OR StringInStr($lines, "h") OR StringInStr($lines, "i") OR StringInStr($lines, "j") Then Sleep(Random(3000,5000)) DoSomethingElse() EndIf (there are actual strings that are 7-15 characters in each place where there is just a letter now) this is inside a Do...Until loop and the Until condition is a timer ( that was initialized right before the loop started). I know there has got to be a better and more efficient way to write this. What am I not thinking of? Thanks for any help! Edited December 17, 2007 by Cambo Link to comment Share on other sites More sharing options...
Generator Posted December 17, 2007 Share Posted December 17, 2007 Something like.. $lines = FileRead("chat.log") If _StringInStr($lines,"a|b|c|d") Then Sleep(Random(3000,5000)) DoSomethingElse() EndIf Func _StringInStr($file,$chars) ;use | as seperator Local $Split=StringSplit($chars,"|") For $i=0 to $Split[0] If Not StringInStr($file,$Split[$i]) Then Return 0 Next Return 1 EndFunc Link to comment Share on other sites More sharing options...
MrCreatoR Posted December 17, 2007 Share Posted December 17, 2007 What am I not thinking of?RegExp If StringRegExp($lines, "(?i)a|b|c|d|e|f|g|h|i|j") Then Sleep(Random(3000,5000)) DoSomethingElse() EndIf Spoiler Using OS: Win 7 Professional, Using AutoIt Ver(s): 3.3.6.1 / 3.3.8.1 AutoIt Russian Community My Work... Spoiler Projects: ATT - Application Translate Tool {new}| BlockIt - Block files & folders {new}| SIP - Selected Image Preview {new}| SISCABMAN - SciTE Abbreviations Manager {new}| AutoIt Path Switcher | AutoIt Menu for Opera! | YouTube Download Center! | Desktop Icons Restorator | Math Tasks | KeyBoard & Mouse Cleaner | CaptureIt - Capture Images Utility | CheckFileSize ProgramUDFs: OnAutoItErrorRegister - Handle AutoIt critical errors {new}| AutoIt Syntax Highlight {new}| Opera Library! | Winamp Library | GetFolderToMenu | Custom_InputBox()! | _FileRun UDF | _CheckInput() UDF | _GUIInputSetOnlyNumbers() UDF | _FileGetValidName() UDF | _GUICtrlCreateRadioCBox UDF | _GuiCreateGrid() | _PathSplitByRegExp() | _GUICtrlListView_MoveItems - UDF | GUICtrlSetOnHover_UDF! | _ControlTab UDF! | _MouseSetOnEvent() UDF! | _ProcessListEx - UDF | GUICtrl_SetResizing - UDF! | Mod. for _IniString UDFs | _StringStripChars UDF | _ColorIsDarkShade UDF | _ColorConvertValue UDF | _GUICtrlTab_CoverBackground | CUI_App_UDF | _IncludeScripts UDF | _AutoIt3ExecuteCode | _DragList UDF | Mod. for _ListView_Progress | _ListView_SysLink | _GenerateRandomNumbers | _BlockInputEx | _IsPressedEx | OnAutoItExit Handler | _GUICtrlCreateTFLabel UDF | WinControlSetEvent UDF | Mod. for _DirGetSizeEx UDF Examples: ScreenSaver Demo - Matrix included | Gui Drag Without pause the script | _WinAttach()! | Turn Off/On Monitor | ComboBox Handler Example | Mod. for "Thinking Box" | Cool "About" Box | TasksBar Imitation Demo Like the Projects/UDFs/Examples? Please rate the topic (up-right corner of the post header: Rating ) * === My topics === * ================================================== ================================================== AutoIt is simple, subtle, elegant. © AutoIt Team Link to comment Share on other sites More sharing options...
Moderators SmOke_N Posted December 17, 2007 Moderators Share Posted December 17, 2007 If StringRegExp($lines, "(?s)(?i)[a-j]") Then etc... Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer. Link to comment Share on other sites More sharing options...
Cambo Posted December 17, 2007 Author Share Posted December 17, 2007 (edited) RegExp If StringRegExp($lines, "(?i)a|b|c|d|e|f|g|h|i|j") Then Sleep(Random(3000,5000)) DoSomethingElse() EndIf Cool! Thanks so much for the fast replies! and this should execute faster than all the ORs? //And the | automatically seperates or do I need to declare that like in the code above the one I quoted? <NVM just read the documentation... works like an OR! Edited December 17, 2007 by Cambo Link to comment Share on other sites More sharing options...
Moderators SmOke_N Posted December 17, 2007 Moderators Share Posted December 17, 2007 Cool!Thanks so much for the fast replies! and this should execute faster than all the ORs?And the | automatically seperate or do I need to declare that like in the code above the one I quoted?| is an "Or" statement in regular expression. Common sense plays a role in the basics of understanding AutoIt... If you're lacking in that, do us all a favor, and step away from the computer. Link to comment Share on other sites More sharing options...
Cambo Posted December 17, 2007 Author Share Posted December 17, 2007 (edited) Thanks so much you guys have been very helpful! This works beautifully! Edited December 17, 2007 by Cambo Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now