kasperghost Posted October 22, 2015 Share Posted October 22, 2015 for the love of god i cant figure out what i'm doing wrong in the following code when trying to change value of a column in a 2d array#cs ---------------------------------------------------------------------------- AutoIt Version: 3.3.14.2 Author: myName Script Function: Template AutoIt script. #ce ---------------------------------------------------------------------------- ; Script Start - Add your code below here #include <Array.au3> #include <File.au3> #include <MsgBoxConstants.au3> $spacechar = chr(32) $aArray = 0 _FileReadToArray(@ScriptFullPath, $aArray) Global $bArray[$aArray[0] + 1] for $i = 1 to $aArray[0] $bArray[$i] = StringSplit($aArray[$i], $spacechar) Next ;for $i = 1 to $bArray[0] ; for $b = 1 to $bArray[$i][0] ; $bArray[$i][$b] = StringStripWS($bArray[$i][$b], 8) ; Next ;Next _ArrayDisplay($bArray[4]) $bArray[4][11] = "ok" _ArrayDisplay($bArray[4])at the first arraydisplay we see that the 4th array has 11 rowsso i'm trying to change that row from that value to value okand then arraydisplay again to see if changed...and eventually when that works write a function to remove empty/whitespaced columns from that 2d array...but first things first why this code always fails withnew1.au3" (34) : ==> Array variable has incorrect number of subscripts or subscript dimension range exceeded.:$bArray[4][11] = "ok"^ ERROR if someone has any clue plz help.thankssimon Link to comment Share on other sites More sharing options...
JohnOne Posted October 22, 2015 Share Posted October 22, 2015 Because you cannot access an array within an array like that.In order to change the contents of an array in another array, you first have to extract the inner array to a temp array, change desired value, and put it back. AutoIt Absolute Beginners Require a serial Pause Script Video Tutorials by Morthawt ipify Monkey's are, like, natures humans. Link to comment Share on other sites More sharing options...
mikell Posted October 22, 2015 Share Posted October 22, 2015 You can use a particular syntax to read an element but as said JO not to change it#include <Array.au3> $spacechar = chr(32) Global $aArray = ["Hello word", "Nice play"] _ArrayDisplay($aArray) Global $bArray[UBound($aArray)] for $i = 0 to UBound($aArray)-1 $bArray[$i] = StringSplit($aArray[$i], $spacechar) Next _ArrayDisplay($bArray[1]) Msgbox(0,"", ($bArray[1])[2] ) ; works for reading ($bArray[1])[2] = "game" Msgbox(0,"", ($bArray[1])[2] ) ; doesn't work for writing $tmp = $bArray[1] ; as saith JO $tmp[2] = "game" $bArray[1] = $tmp _ArrayDisplay($bArray[1]) Link to comment Share on other sites More sharing options...
kasperghost Posted October 22, 2015 Author Share Posted October 22, 2015 so in this case where we have a 2d array are there any examples on how to convert that 2d array into many 1d arrays where i can manipulate themsomething like arr1, arr2, arr3 for the n number of arrays inside that array? since i cant pre-create in advance arrays, since i wont know how many arrays need to pre-create..my goal is to read a text file with several lines of text and i want to be able to separate by line and then each line by wordall in the file are separated by spaces which are different per line for exampleabc abc abc abc abcabc abc abc bacetc.. Link to comment Share on other sites More sharing options...
JohnOne Posted October 22, 2015 Share Posted October 22, 2015 (edited) Yes, there will be ways.First, can you tell you actual endgame, because you may well be wasting a lot of time doing stuff like this, if there is an easier way.I get that you want each space separated word in an array for each line in a file. But for what purpose?You're are under no obligation to answer and I don't normally ask, but it would help your cause. Edited October 22, 2015 by JohnOne AutoIt Absolute Beginners Require a serial Pause Script Video Tutorials by Morthawt ipify Monkey's are, like, natures humans. Link to comment Share on other sites More sharing options...
kasperghost Posted October 22, 2015 Author Share Posted October 22, 2015 (edited) well those files i'm trying to read are kinda like compiler scriptsfor a custom hardware automation system. I want to build a small programthat will be something like an editor for those files.and allow you to easily either add lines either modify existing linesbased on some criteria, so that the final script do more functionality.Editing them by hand is time consuming since there are like hundrendsif not almost a thousand lines. I dont know why they builded itspace separated without some format like xml or ini or whatever.Only the number of spaces is defined if this line is supposed to cover a certain functionbut next line if it is for another function then it has different number of spaces because it has more values.Since the original developer/company no longer exists I want to build asmall editor to edit those files since I have many of those in many workstations.Maybe it would be best to search for code for csv files parser and modify to my needs? And yes as you guessed when I found a way to parse them I will actually count each space between values to figure out a pattern so that I can add the lines... LOL XD Edited October 22, 2015 by kasperghost extra info... Link to comment Share on other sites More sharing options...
JohnOne Posted October 22, 2015 Share Posted October 22, 2015 (edited) So on a line such as this you mentioned "abc abc abc abc abc" what would you want your array to look like?abc abc abc abc abc? Edited October 22, 2015 by JohnOne AutoIt Absolute Beginners Require a serial Pause Script Video Tutorials by Morthawt ipify Monkey's are, like, natures humans. Link to comment Share on other sites More sharing options...
kylomas Posted October 22, 2015 Share Posted October 22, 2015 Can you post an example of the real data? 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 Link to comment Share on other sites More sharing options...
kylomas Posted October 23, 2015 Share Posted October 23, 2015 (edited) kasperghost,Crank your file through this...#include <StringConstants.au3> #include <array.au3> ; read your file to a 1D array splitting at EOLS (assuming CRLF for EOL string) local $aFile = stringsplit(fileread(@scriptdir & '\1.txt'),@CRLF, $STR_NOCOUNT + $STR_ENTIRESPLIT) _arraydisplay($aFile,'Each line is an array element') ; determine max number of arguments to dimension 2D array local $iMaxCols for $i = 0 to ubound($aFile) - 1 stringreplace($aFile[$i],' ',' ') $iMaxCols = (@extended > $iMaxCols ? @extended : $iMaxCols) Next ; create the result array as $aResult[# of lines from file][Max # of spaces + 1] local $aResult[ubound($aFile)][$iMaxCols+2] ; populate the 2D array...col 0 is the number of parms/stmts/args for the line local $aTmp for $i = 0 to ubound($aFile) - 1 $aTmp = stringsplit($aFile[$i],' ') for $j = 0 to ubound($aTmp) - 1 $aResult[$i][$j] = $aTmp[$j] Next Next _arraydisplay($aResult,'# of arguments per line is in col0')maybe it will help.kylomasedit: Important - the above code assumes that space is used only as a delimiter and values have no embedded spaces. If there are embedded spaces then we can use a regular expression solution for the 2ND split. Edited October 23, 2015 by kylomas additional info 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 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