lawonama Posted January 2, 2012 Posted January 2, 2012 Hello, I recently started to script in autoit again, and I'm making a kind of tool. Is it possible to make an inputbox, and if you write H and press on ok, it'll say Z I and press on ok, it'll say O If you write there HI, it'll say ZO. Is that possible? Thanks already
Xenobiologist Posted January 2, 2012 Posted January 2, 2012 Yes sure should be no problem. Scripts & functions Organize Includes Let Scite organize the include files Yahtzee The game "Yahtzee" (Kniffel, DiceLion) LoginWrapper Secure scripts by adding a query (authentication) _RunOnlyOnThis UDF Make sure that a script can only be executed on ... (Windows / HD / ...) Internet-Café Server/Client Application Open CD, Start Browser, Lock remote client, etc. MultipleFuncsWithOneHotkey Start different funcs by hitting one hotkey different times
Moderators Melba23 Posted January 2, 2012 Moderators Posted January 2, 2012 lawonama,Is that possible?Yes. M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area
lawonama Posted January 2, 2012 Author Posted January 2, 2012 How to make it when "TEXT" is written, and you press ok ABCD comes. But if EXAMPLE is written, and you press ok, TEST2 comes?
PsaltyDS Posted January 2, 2012 Posted January 2, 2012 Post what you have so far. Did you create the GUI with the input box and OK button yet? We are not going to write your script for you. To get help you need to tell us how far along you are and exactly what you are stuck on. Valuater's AutoIt 1-2-3, Class... Is now in Session!For those who want somebody to write the script for them: RentACoder"Any technology distinguishable from magic is insufficiently advanced." -- Geek's corollary to Clarke's law
lawonama Posted January 2, 2012 Author Posted January 2, 2012 (edited) #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> #Region Form= $Form1 = GUICreate("HumanGhoul Translator", 487, 226, 192, 124) $Input1 = GUICtrlCreateInput("", 8, 72, 465, 50) $Button1 = GUICtrlCreateButton("Translate!", 176, 128, 137, 89, $WS_GROUP) $text1 = GUICtrlCreateLabel("Human > Ghoul.", 208, 8, 81, 17) $Text2 = GUICtrlCreateLabel("Please insert your text here:", 184, 48, 134, 17) GUISetState(@SW_SHOW) #EndRegion While 1 $msg = GUIGetMsg() Select Case $msg = $GUI_EVENT_CLOSE GUIDelete() ;Exit the script Exit Case $msg = $Button1 MsgBox(64, "Ghoul Language", "The script") EndSelect WEnd This is my code so far, and where it says "The script" it needs to transform. In example: If you wrote in the inputbox : "TEST" and you press on the OK button, it says "RANDOMTEXT" "HELLO" and you press on the OK button, it says "TheSecondRandomText" Edited January 2, 2012 by lawonama
PsaltyDS Posted January 2, 2012 Posted January 2, 2012 Here's a tweak to put the transcription in a function: #include <ButtonConstants.au3> #include <EditConstants.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> Global $Form1, $Input1, $Button1, $text1, $Text2 #region Form $Form1 = GUICreate("HumanGhoul Translator", 487, 226, 192, 124) $Input1 = GUICtrlCreateInput("", 8, 72, 465, 50) $Button1 = GUICtrlCreateButton("Translate!", 176, 128, 137, 89, $WS_GROUP) $text1 = GUICtrlCreateLabel("Human > Ghoul.", 208, 8, 81, 17) $Text2 = GUICtrlCreateLabel("Please insert your text here:", 184, 48, 134, 17) GUISetState(@SW_SHOW) #endregion Form While 1 $msg = GUIGetMsg() Select Case $msg = $GUI_EVENT_CLOSE GUIDelete() ;Exit the script Exit Case $msg = $Button1 MsgBox(64, "Ghoul Language", _Transcribe()) EndSelect WEnd ; Returns transcribed text Func _Transcribe() Local $sInput, $sOutput $sInput = GUICtrlRead($Input1) $sOutput = StringUpper($sInput) ; <--- Apply your transcription rules here Return $sOutput EndFunc Edit the function to take the $sInput string variable and apply all your transcription rules to it. How best to apply those rules depends on how many there are and how complex they are. In this simple example, all it does is make the string all upper case. How many rules are there, and how complex are they? Valuater's AutoIt 1-2-3, Class... Is now in Session!For those who want somebody to write the script for them: RentACoder"Any technology distinguishable from magic is insufficiently advanced." -- Geek's corollary to Clarke's law
lawonama Posted January 2, 2012 Author Posted January 2, 2012 I already made it on my own, thanks tho. Got another question, i have: While 1 $msg = GUIGetMsg() Select Case $msg = $GUI_EVENT_CLOSE GUIDelete() Exit Case $msg = $Button1 If $Input1 <> "a" Then MsgBox(4096, "Translator", "b") ElseIf $Input1 <> "b" Then MsgBox(4096, "Translator", "c") Endif EndSelect WEnd When I write A, the inputbox says B When I write B, the inputbox says C But when I write AB, the inputbox says only B instead of BC. How to fix this without adding AB > BC to the list?
Moderators Melba23 Posted January 2, 2012 Moderators Posted January 2, 2012 lawonama,Use StringSplit to separate the letters into an array. Then loop through the array and action each letter. Finally use _ArrayToString to put it back into string form and rewrite it to the input. M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area
lawonama Posted January 2, 2012 Author Posted January 2, 2012 Can you give me a little example about how to use StringSplit and _ArrayToString. I don't understand it as I never tried this before.
Moderators Melba23 Posted January 2, 2012 Moderators Posted January 2, 2012 lawonama, And what about trying to code something yourself to see how the various functions work? Do you want it all on a plate? Where is the fun in that? But if you do get stuck then take a look here: #include <Array.au3> ; Here is the text $sText = "ABCDEF" ; Which we split $aText = StringSplit($sText, "") ; Like this _ArrayDisplay($aText) ; Now we loop through the letters For $i = 1 To $aText[0] ; And move each letter one up $aText[$i] = Chr(Asc($aText[$i]) + 1) Next ; So we get this _ArrayDisplay($aText) ; Now we reasemble the string $sCodedText = _ArrayToString($aText, "", 1) ; And here is the result MsgBox(0, "Done", $sText & @CRLF & "now reads" & @CRLF & $sCodedText) M23 Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind Open spoiler to see my UDFs: Spoiler ArrayMultiColSort ---- Sort arrays on multiple columnsChooseFileFolder ---- Single and multiple selections from specified path treeview listingDate_Time_Convert -- Easily convert date/time formats, including the language usedExtMsgBox --------- A highly customisable replacement for MsgBoxGUIExtender -------- Extend and retract multiple sections within a GUIGUIFrame ---------- Subdivide GUIs into many adjustable framesGUIListViewEx ------- Insert, delete, move, drag, sort, edit and colour ListView itemsGUITreeViewEx ------ Check/clear parent and child checkboxes in a TreeViewMarquee ----------- Scrolling tickertape GUIsNoFocusLines ------- Remove the dotted focus lines from buttons, sliders, radios and checkboxesNotify ------------- Small notifications on the edge of the displayScrollbars ----------Automatically sized scrollbars with a single commandStringSize ---------- Automatically size controls to fit textToast -------------- Small GUIs which pop out of the notification area
kylomas Posted January 2, 2012 Posted January 2, 2012 Iawonama, This piqued my curiousity and I need the experience working with Gui's so I coded this ditty that you may find usefull. expandcollapse popup#include <ButtonConstants.au3> #include <array.au3> #include <GUIConstantsEx.au3> #include <StaticConstants.au3> #include <WindowsConstants.au3> Local $a_Input_letter[4] Local $a_transposition_letter[4] ; all letters that can be input $a_Input_letter[0] = 'a' $a_Input_letter[1] = 'b' $a_Input_letter[2] = 'c' $a_Input_letter[3] = 'd' ; what each input letter will transpose to $a_transposition_letter[0] = 'z' $a_transposition_letter[1] = 'f' $a_transposition_letter[2] = 'y' $a_transposition_letter[3] = 'l' ; el guio Local $gui010 = GUICreate('Letter X-pose Example',500,400) GUICtrlCreatelabel('Enter Letter to Transpose',100,80,300,40) global $inp010 = GUICtrlCreateInput('',100,100,300,20) GUICtrlCreatelabel('Transposition',100,130,300,40) global $out010 = GUICtrlCreateLabel('',100,150,300,20,$ss_sunken) Local $btn010 = GUICtrlCreatebutton('Transpose',100,300,300,30) GUISetState() Local $msg Do $msg = GUIGetMsg() select Case $msg = $btn010 transpose() Case else endselect until $msg = $gui_event_close exit Func transpose() Local $in, $out, $hit = false GUICtrlSetData($out010,'') Local $in = stringsplit(GUICtrlRead($inp010),"") ;_arraydisplay($in) For $i = 1 To $in[0] For $j = 0 To UBound($a_Input_letter) - 1 If $a_Input_letter[$j] = $in[$i] Then $out &= $a_transposition_letter[$j] $hit = true endif next If Not $hit Then $out &= '-' $hit = false Next GUICtrlSetData($out010,$out) GUICtrlSetState($inp010,$gui_focus) endfunc @M23 - Sorry if I'm stepping on your toes... kylomas Forum Rules Procedure for posting code "I like pigs. Dogs look up to us. Cats look down on us. Pigs treat us as equals." - Sir Winston Churchill
MilesAhead Posted January 2, 2012 Posted January 2, 2012 (edited) On XP and later you should have Scripting.Dictionary on the machine. Basically it's an array indexed by a key rather than an index number. Instead of $myArray[5] = "Some Text" you would say $myArray("Jimi") = "Hendrix" or whatever. Makes it easy to look up using one string and return another. I find it nice for lists of color values. Access the color hex value by the color name etc.. But you can use it for most any kind of text substitution. The dictionary lookup does the search instead of looping through an array. I made a few wrapper functions for Scripting.Dictionary object. #include <Array.au3> ;use Scripting.Dictionary object for simple associative arrays Func _AssocArray() Local $aArray = ObjCreate("Scripting.Dictionary") If @error Then Return SetError(1, 0, 0) EndIf $aArray.CompareMode = 1 ; not case sensitive string compare Return $aArray EndFunc ;==>_AssocArray Func _AssocArrayDestroy(ByRef $aArray) If Not IsObj($aArray) Then Return False EndIf $aArray.RemoveAll() $aArray = 0 Return True EndFunc ;==>_AssocArrayDestroy ;filter out empty array strings ("") Func _ArrayDelBlanks(ByRef $someArray) Local $index = -1 While UBound($someArray) > 0 $index = _ArraySearch($someArray, "") If $index > -1 Then _ArrayDelete($someArray, $index) Else ExitLoop EndIf WEnd EndFunc ;==>_ArrayDelBlanks Creating a new Associative Array is a one-liner $myArray = _AssocArray() If @error then notify there was an error etc.. Edited January 2, 2012 by MilesAhead My Freeware Page
kylomas Posted January 2, 2012 Posted January 2, 2012 MilesAhead, Would be interesting to do a stress test comparing 2d array against SQLite and dictionary... Don't have time right now, however. kylomas Forum Rules Procedure for posting code "I like pigs. Dogs look up to us. Cats look down on us. Pigs treat us as equals." - Sir Winston Churchill
MilesAhead Posted January 2, 2012 Posted January 2, 2012 (edited) btw when using the dictionary always test that a key exists with If $myArray.Exists("NavyBlue") then otherwise as soon as you present it with a key even on the right hand side of an assignment, it will create an entry with an empty value. So if the key doesn't exist and you do $myValue = $myArray("NavyBlue") the variable $myValue will be set to "" (empty string) (I wrote that delete blanks function before I fully understood how to use the dictionary) Edited January 2, 2012 by MilesAhead My Freeware Page
Malkey Posted January 3, 2012 Posted January 3, 2012 You may be able to alter this example to get it to perform the way you would like. expandcollapse popup#include <Array.au3> #include <GUIConstantsEx.au3> #include <WindowsConstants.au3> Global $Form1, $Input1, $Button1, $text1, $Text2 #region Form $Form1 = GUICreate("HumanGhoul Translator", 487, 226, 192, 124) $Input1 = GUICtrlCreateEdit('Hi, "HI H TEXT A AB" is a TEST.' & @CRLF & @CRLF & @CRLF & "HELLO everbody.", 8, 72, 465, 80) $Button1 = GUICtrlCreateButton("Translate!", 176, 158, 137, 59, $WS_GROUP) $text1 = GUICtrlCreateLabel("Human > Ghoul.", 208, 8, 81, 17) $Text2 = GUICtrlCreateLabel("Please insert your text here:", 184, 48, 134, 17) GUISetState(@SW_SHOW) #endregion Form While 1 $msg = GUIGetMsg() Switch $msg Case $GUI_EVENT_CLOSE Exit Case $Button1 MsgBox(64, "Ghoul Language", _Transcribe()) EndSwitch WEnd ; Returns transcribed text Func _Transcribe() Local $iIndex, $sInput, $sOutput, $aOutput ; Substitution encryption array ($aArray2D[n][0] is substituted with $aArray2D[n][1]). eg. ; "H" is substituted with "Z", "TEST" is substituted with "RANDOMTEXT", etc. Local $aArray2D[10][2] = [ _ ["H", "Z"],["I", "O"],["HI", "ZO"],["TEST", "RANDOMTEXT"],["HELLO", "TheSecondRandomText"], _ ["TEXT", "ABCD"],["EXAMPLE", "TEST2"],["A","B"],["B", "C"],["AB","BC"]] $sInput = GUICtrlRead($Input1) $sInput = StringRegExpReplace($sInput, '(,|.|")', " 1 ") ; Surround coma, fullstop, and/or double quotes with spaces, preparing for StringSplit() on spaces. $sInput = StringRegExpReplace($sInput, "(v{1,2})", " <^> ") ; Replace @LF or @CRLF with " <^> " $sInput = StringStripWS($sInput, 7) ; Remove trailing and leading spaces, and, replace double or more adjacent spaces with one space. $aOutput = StringSplit($sInput, " ", 2) ; Split the string at each space into an array. ;_ArrayDisplay($aOutput) For $i = 0 To UBound($aOutput) - 1 If $aOutput[$i] = "<^>" Then ; Convert "<^>" back to @LF $sOutput &= @LF ElseIf StringRegExp($aOutput[$i], '[,."]') Then ; Coma, fullstop, and double quotes are un-encrypted. $sOutput &= $aOutput[$i] Else $iIndex = _ArraySearch($aArray2D, $aOutput[$i], 0, 0, 1) ; Case sensitive. If @error = 6 Then ; If text not found in substitution array then return original text un-encrypted. $sOutput &= " " & $aOutput[$i] Else $sOutput &= " " & $aArray2D[$iIndex][1] ; Return encrypted text from substitution array. EndIf EndIf Next Return StringStripWS($sOutput, 1) ; Remove leading space and return. EndFunc ;==>_Transcribe
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