dreamzboy Posted July 26, 2012 Posted July 26, 2012 (edited) Hi All,Sorry for raising this noobie thread but I can't seem to find a function that can read a string and break it up into an Array. I hope it's easy to do. I can do this in C but Autoit is a little different. Here's an example of what I would like to do, have an input box (GuiCtrlCreateEdit) where user can paste the information into it and my program will swap the information to have the output below with a click of a button: User Input:134.567.890.123 Hostname1 #Some comment on the Hostname094.123.344.333 Hostname2 #Another comment on the Hostname...To be specific:Array[0,0] = 134.567.890.123 Array[0,1] = Hostname 1Array[1,0] = 094.123.344.333 Array[1,1] = Hostname 2What I would like to see in the output:Hostname1 134.567.890.123Hostname2 094.123.344.333...One method that I was going to use is StringisSpace, but that function only detects spaces. If there are any characters within it, it does not work. How will I go about making this work? I know I'll have to use the "_Arrayswap" function within the library but will it work given that I have 2 dimensions array?Thanks in advance guys! It's been awhile since I did any programming. Edited July 26, 2012 by dreamzboy
Mechaflash Posted July 26, 2012 Posted July 26, 2012 tab delimited? Spoiler “Hello, ladies, look at your man, now back to me, now back at your man, now back to me. Sadly, he isn’t me, but if he stopped using ladies scented body wash and switched to Old Spice, he could smell like he’s me. Look down, back up, where are you? You’re on a boat with the man your man could smell like. What’s in your hand, back at me. I have it, it’s an oyster with two tickets to that thing you love. Look again, the tickets are now diamonds. Anything is possible when your man smells like Old Spice and not a lady. I’m on a horse.”
iamtheky Posted July 26, 2012 Posted July 26, 2012 Dim $Aarray[2][2] $Aarray[0][0] = "134.567.890.123" $Aarray[0][1] = "Hostname 1" $Aarray[1][0] = "094.123.344.333" $Aarray[1][1] = "Hostname 2" msgbox (0, '' , $Aarray[0][1] & @TAB & $Aarray[0][0] & @CRLF & $Aarray[1][1] & @TAB & $Aarray[1][0]) ,-. .--. ________ .-. .-. ,---. ,-. .-. .-. .-. |(| / /\ \ |\ /| |__ __||| | | || .-' | |/ / \ \_/ )/ (_) / /__\ \ |(\ / | )| | | `-' | | `-. | | / __ \ (_) | | | __ | (_)\/ | (_) | | .-. | | .-' | | \ |__| ) ( | | | | |)| | \ / | | | | | |)| | `--. | |) \ | | `-' |_| (_) | |\/| | `-' /( (_)/( __.' |((_)-' /(_| '-' '-' (__) (__) (_) (__)
DicatoroftheUSA Posted July 26, 2012 Posted July 26, 2012 (edited) Another skinned cat. It may be a faster script without messing with arrays. $sSampleText="134.567.890.123 Hostname1 #Some comment on the Hostname" $sSampleText=StringRegExpReplace($sSampleText , '(.*?)h+(.*?)h+(#.*)v?' , '$2 $1 $3' , 0) MsgBox(0,"gar",$sSampleText) Edited July 26, 2012 by DicatoroftheUSA Statism is violence, Taxation is theft. Autoit Wiki
dreamzboy Posted July 26, 2012 Author Posted July 26, 2012 tab delimited?It's sometime space and sometime tab.
dreamzboy Posted July 26, 2012 Author Posted July 26, 2012 Another skinned cat. It may be a faster script without messing with arrays. $sSampleText="134.567.890.123 Hostname1 #Some comment on the Hostname" $sSampleText=StringRegExpReplace($sSampleText , '(.*?)h+(.*?)h+(#.*)v?' , '$2 $1 $3' , 0) MsgBox(0,"gar",$sSampleText) This will not work because I'm going use GuiCtrlCreateEdit and have user input those information. It could ranges from 1 line to 100 lines. The program would need to read the user input and then convert it to the output suggested above.
DicatoroftheUSA Posted July 26, 2012 Posted July 26, 2012 (edited) Here is another example with multiple lines with some built in pattern detection. Notice the string after @crlf is relatively backwards. $sSampleText="134.567.890.123 Hostname1 #Some comment on the Hostname"&@CRLF&"Hostname2 094.123.344.333 #Another comment on the Hostname." $sSampleText=StringRegExpReplace($sSampleText , '([0-9]{1,3}[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3})h+(.*?)h+(#.*)v?' , '$2 $1 $3' ) $sSampleText=StringStripWS($sSampleText,4) MsgBox(0,"gar",$sSampleText) Edited July 26, 2012 by DicatoroftheUSA Statism is violence, Taxation is theft. Autoit Wiki
dreamzboy Posted July 27, 2012 Author Posted July 27, 2012 Thanks for the useful tip. It's just unfortunate that your code is not flexible. Quite honestly, I'm looking for a function to detect a "space or tab" between the string, from there I'll know how to break it up into arrays to make the code easier to manage. I'll hate to do all this in a C console while Autoit has such a nice GUI to it. Any additional help is much appreciated.
Mechaflash Posted July 27, 2012 Posted July 27, 2012 You can grill and season it... #include <Array.au3> Local $asInput[2], $asOutput[2][2] $asInput[0] = "192.168.0.1" & @TAB & "hostname 1" & @TAB & "#some comment about hostname 1" $asInput[1] = "192.168.0.2 hostname 2 #some comment about hostname 2" For $string in $asInput _Output($asOutput, $string) If @error Then msgbox(64 + 262144, @ScriptName, "Failed to parse '" & $string & "'. Was not TAB or SPACE delimited.") _ArrayDisplay($asOutput) ; Check Output Next Func _Output(ByRef $asOutput, $sString) Static $x = 0 ; hehe... static-x $asSplit = StringSplit($sString, "#") If Not @error Then $sString = $asSplit[1] If StringInStr($sString, @TAB) Then $asSplit = 0 $asSplit = StringSplit($sString, @TAB) $asOutput[$x][0] = $asSplit[2] $asOutput[$x][1] = $asSplit[1] $x+=1 Return SetError(0,0,True) Else $iSpace = StringInStr($sString, " ") If Not @error Then $asOutput[$x][0] = StringRight($sString, StringLen($sString) - $iSpace) $asOutput[$x][1] = StringLeft($sString, $iSpace - 1) Return SetError(0,0,False) Else Return SetError(1,0,False) EndIf EndIf Return SetError(1,0,False) EndFunc dreamzboy 1 Spoiler “Hello, ladies, look at your man, now back to me, now back at your man, now back to me. Sadly, he isn’t me, but if he stopped using ladies scented body wash and switched to Old Spice, he could smell like he’s me. Look down, back up, where are you? You’re on a boat with the man your man could smell like. What’s in your hand, back at me. I have it, it’s an oyster with two tickets to that thing you love. Look again, the tickets are now diamonds. Anything is possible when your man smells like Old Spice and not a lady. I’m on a horse.”
dreamzboy Posted July 27, 2012 Author Posted July 27, 2012 You can grill and season it... #include <Array.au3> Local $asInput[2], $asOutput[2][2] $asInput[0] = "192.168.0.1" & @TAB & "hostname 1" & @TAB & "#some comment about hostname 1" $asInput[1] = "192.168.0.2 hostname 2 #some comment about hostname 2" For $string in $asInput _Output($asOutput, $string) If @error Then msgbox(64 + 262144, @ScriptName, "Failed to parse '" & $string & "'. Was not TAB or SPACE delimited.") _ArrayDisplay($asOutput) ; Check Output Next Func _Output(ByRef $asOutput, $sString) Static $x = 0 ; hehe... static-x $asSplit = StringSplit($sString, "#") If Not @error Then $sString = $asSplit[1] If StringInStr($sString, @TAB) Then $asSplit = 0 $asSplit = StringSplit($sString, @TAB) $asOutput[$x][0] = $asSplit[2] $asOutput[$x][1] = $asSplit[1] $x+=1 Return SetError(0,0,True) Else $iSpace = StringInStr($sString, " ") If Not @error Then $asOutput[$x][0] = StringRight($sString, StringLen($sString) - $iSpace) $asOutput[$x][1] = StringLeft($sString, $iSpace - 1) Return SetError(0,0,False) Else Return SetError(1,0,False) EndIf EndIf Return SetError(1,0,False) EndFunc This is good. Thanks a bunch!! Time to bring out the bbq sauce.
UEZ Posted July 28, 2012 Posted July 28, 2012 (edited) Here another version: #include <Array.au3> $sIP = "134.567.890.123 Hostname1 #Some comment on the Hostname" & @CRLF & _ "094.123.344.333 Hostname2 #Another comment on the Hostname" & @CRLF & _ "123.222.111.10 Hostname3 #3rd entry" $aResult = TransformInput($sIP) If Not @error Then _ArrayDisplay($aResult) Func TransformInput($sText) If Not IsString($sText) Then Return SetError(1, 0, 0) If $sText = "" Then Return SetError(2, 0, 0) Local $aSplit = StringRegExp($sText, "(?m)s*(d{1,3}.d{1,3}.d{1,3}.d{1,3})s*(w+)s*", 3) If @error Then Return SetError(3, 0, 0) Local Const $iUB = UBound($aSplit) Local $a2D[Floor($iUB / 2)][2], $i, $j = 0 While $i < $iUB Switch BitAND($i, 1) Case 1 $a2D[$j][0] = $aSplit[$i] $j += 1 Case 0 $a2D[$j][1] = $aSplit[$i] EndSwitch $i += 1 WEnd Return $a2D EndFunc Br, UEZ Edited July 28, 2012 by UEZ Please don't send me any personal message and ask for support! I will not reply! Selection of finest graphical examples at Codepen.io The own fart smells best! ✌Her 'sikim hıyar' diyene bir avuç tuz alıp koşma!¯\_(ツ)_/¯ ٩(●̮̮̃•̃)۶ ٩(-̮̮̃-̃)۶ૐ
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