Deye Posted August 31, 2017 Share Posted August 31, 2017 (edited) Hi, A small exercise: I need an StringRegExp command that will convert this data to a 2d array With $STR_STRIPLEADING + $STR_STRIPTRAILING using delimiters of @CRLF and "=" Thanks #include <Array.au3> $aData = " " & @CRLF & _ "type= Button " & @CRLF & _ " name = " & @CRLF & _ " value=Convert " & @CRLF & _ " start_X=23 " & @CRLF & _ " start_Y = 31 " & @CRLF & _ "Width = 63 " & @CRLF & _ " Height = 45" & @CRLF see "name = " has no value , will need the array in spite of that ( if possible ) Edited August 31, 2017 by Deye Link to comment Share on other sites More sharing options...
Moderators JLogan3o13 Posted August 31, 2017 Moderators Share Posted August 31, 2017 @Deye you have been around long enough to know that we follow more of a "Teach a man to fish" motto here, rather than you putting in a request and someone spoon-feeding the code to you. Have you tried anything based on the help file? If so, how about posting what you have attempted on your own, and where you're struggling? "Profanity is the last vestige of the feeble mind. For the man who cannot express himself forcibly through intellect must do so through shock and awe" - Spencer W. Kimball How to get your question answered on this forum! Link to comment Share on other sites More sharing options...
Deye Posted August 31, 2017 Author Share Posted August 31, 2017 Thanks * what i have posted is what i'm interested to find out more about ..if possiblehttps://www.autoitscript.com/forum/topic/73382-stringsplit-with-multiple-delimiters/ for now: 1. the data is some data I'm receiving from the internet that looks like what I have postedthe array in this example shows up strange .. 2 ReDiming the array is where I'm stuck in this example as in my script #include <Array.au3> $aData = "type= Button " & @CRLF & _ " name = tt" & @CRLF & _ " value=Convert " & @CRLF & _ " start_X=23 " & @CRLF & _ " start_Y = 31 " & @CRLF & _ "Width = 63 " & @CRLF & _ " Height = 45" & @CRLF $aData = StringStripWS($aData, 3) $aArray = StringSplit($aData, @CRLF) ReDim $aArray[UBound($aArray)][2] For $i = 1 To UBound($aArray) - 1 $aSplitted = StringSplit($aArray[$i], "=") $aArray[$i][0] = StringStripWS($aSplitted[1], 3) $aArray[$i][1] = StringStripWS($aSplitted[2], 3) Next _ArrayDisplay($aArray) Link to comment Share on other sites More sharing options...
iamtheky Posted August 31, 2017 Share Posted August 31, 2017 (edited) that's close enough: fysa: when redimming, if you change the dimensions the original array is discarded #include <Array.au3> $sData ="type= Button " & @CRLF & _ " name =Button1 " & @CRLF & _ " value=Convert " & @CRLF & _ " start_X=23 " & @CRLF & _ " start_Y = 31 " & @CRLF & _ "Width = 63 " & @CRLF & _ " Height = 45" & @CRLF $a1 = StringRegExp($sData , "(.*)=" , 3) $a2 = StringRegExp($sData , "=(.*)" , 3) local $a3[ubound($a1)][2] for $i = 0 to ubound($a1) - 1 $a3[$i][0] = stringstripws($a1[$i] , 3) $a3[$i][1] = stringstripws($a2[$i] , 3) next _ArrayDisplay($a3) Edited August 31, 2017 by iamtheky Deye 1 ,-. .--. ________ .-. .-. ,---. ,-. .-. .-. .-. |(| / /\ \ |\ /| |__ __||| | | || .-' | |/ / \ \_/ )/ (_) / /__\ \ |(\ / | )| | | `-' | | `-. | | / __ \ (_) | | | __ | (_)\/ | (_) | | .-. | | .-' | | \ |__| ) ( | | | | |)| | \ / | | | | | |)| | `--. | |) \ | | `-' |_| (_) | |\/| | `-' /( (_)/( __.' |((_)-' /(_| '-' '-' (__) (__) (_) (__) Link to comment Share on other sites More sharing options...
Deye Posted August 31, 2017 Author Share Posted August 31, 2017 53 minutes ago, iamtheky said: fysa: when redimming, if you change the dimensions the original array is discarded Derived of my knowledge of this, I thought that's an OK #include <Array.au3> Local $aWinList = WinList() ReDim $aWinList[UBound($aWinList)][3] _ArrayDisplay($aWinList) Link to comment Share on other sites More sharing options...
iamtheky Posted September 1, 2017 Share Posted September 1, 2017 because winlist already returns a 2D array, you are just redefining the number of elements in the second dimension, and everything stays in tact. Whereas in the previous post you were adding a second dimension to a 1D array, which blows everything up and starts over with the new specifications. ,-. .--. ________ .-. .-. ,---. ,-. .-. .-. .-. |(| / /\ \ |\ /| |__ __||| | | || .-' | |/ / \ \_/ )/ (_) / /__\ \ |(\ / | )| | | `-' | | `-. | | / __ \ (_) | | | __ | (_)\/ | (_) | | .-. | | .-' | | \ |__| ) ( | | | | |)| | \ / | | | | | |)| | `--. | |) \ | | `-' |_| (_) | |\/| | `-' /( (_)/( __.' |((_)-' /(_| '-' '-' (__) (__) (_) (__) Link to comment Share on other sites More sharing options...
jguinch Posted September 1, 2017 Share Posted September 1, 2017 (edited) StringRegExp cannot return a 2D array. You have to build a 2D array and fill it using a loop (like @iamtheky does) There are some example on the forum to transform a 1D to a 2D (i remember _Array1DTo2D) Here is another example, using the option 4 with StringRegExp : #include <Array.au3> $sData ="type= Button " & @CRLF & _ " name =Button1 " & @CRLF & _ " value=Convert " & @CRLF & _ " start_X=23 " & @CRLF & _ " start_Y = 31 " & @CRLF & _ "Width = 63 " & @CRLF & _ " Height = 45" & @CRLF $aValues = StringRegExp($sData, "(\w+)\h*=\h*(\w+)", 4) Local $aResult[UBound($aValues)][2] For $i = 0 To UBound($aValues) - 1 $aResult[$i][0] = ($aValues[$i])[1] $aResult[$i][1] = ($aValues[$i])[2] Next _ArrayDisplay($aResult) Edited September 1, 2017 by jguinch Spoiler Network configuration UDF, _DirGetSizeByExtension, _UninstallList Firefox ConfigurationArray multi-dimensions, Printer Management UDF Link to comment Share on other sites More sharing options...
mikell Posted September 1, 2017 Share Posted September 1, 2017 #include <Array.au3> $sData ="type= Button " & @CRLF & _ " name =Button1 " & @CRLF & _ " value=Convert " & @CRLF & _ " start_X=23 " & @CRLF & _ " start_Y = 31 " & @CRLF & _ "Width = 63 " & @CRLF & _ " Height = 45" & @CRLF FileWrite(@tempdir & "\test.ini", "[data]" & @crlf & $sData) $res = IniReadSection(@tempdir & "\test.ini", "data") FileDelete(@tempdir & "\test.ini") _ArrayDisplay($res) Link to comment Share on other sites More sharing options...
jguinch Posted September 1, 2017 Share Posted September 1, 2017 Good idea Mikell ! Spoiler Network configuration UDF, _DirGetSizeByExtension, _UninstallList Firefox ConfigurationArray multi-dimensions, Printer Management UDF Link to comment Share on other sites More sharing options...
Malkey Posted September 1, 2017 Share Posted September 1, 2017 Another method. #include <Array.au3> $sData = "type= Button 1 " & @CRLF & _ " name = " & @CRLF & _ " value=Convert " & @CRLF & _ " start_X=23 " & @CRLF & _ " start_Y = 31 " & @CRLF & _ "Width = 63 " & @CRLF & _ " Height = 45" & @CRLF ; Remove line leading and equal sign leading spaces, and, equal sign trailing and line trailing spaces, and, trailing @CRLF of $Data. $sData = StringRegExpReplace($sData, "(?m)^\h+|\h+(?==)|(?<==)\h+|\h+$|\Z\v+", "") ; Or, pattern: "(?m)\h+(?==|$)|(?<==|^)\h+|\Z\v+" ; "\h+(?==)" - matches the spaces followed by an equal sign - Positive lookahead assertion ; "(?<==)\h+" - matches the space/s that is/are preceded by an equal sign - Positive lookbehind assertion Local $res[0][2] _ArrayAdd($res, $sData, 0, "=") _ArrayDisplay($res) 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