mlister Posted September 30, 2004 Share Posted September 30, 2004 (edited) I have 2 arrays that I would like to compare, and if the value in $Array1 does not exist in $Array2, then add it to a txt file I was thinking something like? For $x = 1 to Ubound($Array1,1) $tmp = $Array1[$x] For $y = 1 to Ubound($Array2,1) $tmp2 = $Array2[$y] IF not StringInStr($tmp, $tmp2) Then FileWriteLine($new , $tmp & @CRLF) EndIf Next Next I don't think the second array movement is right!?! But I'm lost now...... Edited September 30, 2004 by mlister Link to comment Share on other sites More sharing options...
SlimShady Posted September 30, 2004 Share Posted September 30, 2004 (edited) Try this... For $x = 1 to Ubound($Array1) - 1 $tmp = $Array1[$x] $tmp2 = $Array2[$x] If $tmp <> $tmp2 Then FileWriteLine($new , $tmp & @CRLF) EndIf Next Edited September 30, 2004 by SlimShady Link to comment Share on other sites More sharing options...
mlister Posted September 30, 2004 Author Share Posted September 30, 2004 looks good, and works! BUT... The Arrays do not have the same number of values. At the moment $Array2 has only 3 values, whereas $Array1 has around 20. So I get an error because exceeded the $Array2 range. Also, in the future this may be the other way around. i.e. $Array1 has less values than $Array2! Any Ideas?? Thanks a lot Link to comment Share on other sites More sharing options...
Matt @ MPCS Posted September 30, 2004 Share Posted September 30, 2004 You could just do some bounds checking... For $x = 1 to Ubound($Array1) - 1 If( $x > (UBound($Array2) - 1) ) Then ExitLoop $tmp = $Array1[$x] $tmp2 = $Array2[$x] If $tmp <> $tmp2 Then FileWriteLine($new , $tmp & @CRLF) EndIf Next Hope that helps! *** Matt @ MPCS Link to comment Share on other sites More sharing options...
mlister Posted September 30, 2004 Author Share Posted September 30, 2004 Adding the bounds checking gets rid of the error - but the script doesn't really do what I need. let me explain, I need to check every value in $Array1 against all the values in $Array2, Logically ; Check $Array1[1] against $Array2[1], $Array2[2], Etc.... And only FileWriteLine() if value in $Array1[1] does not exist in any value in $Array2. Does that make sense?? Is it possible? thanks for your help Link to comment Share on other sites More sharing options...
Matt @ MPCS Posted September 30, 2004 Share Posted September 30, 2004 If that is the case then your original script was a lot closer than the one Slim put... Try this: For $x = 1 to Ubound($Array1) - 1 $tmp = $Array1[$x] For $y = 1 to Ubound($Array2) - 1 $tmp2 = $Array2[$y] If NOT StringInStr($tmp, $tmp2) Then FileWriteLine($new , $tmp & @CRLF) EndIf Next Next These are both single dimension arrays correct? That should work, Hope this helps! *** Matt @ MPCS Link to comment Share on other sites More sharing options...
mlister Posted September 30, 2004 Author Share Posted September 30, 2004 Matt, Tried the script but still no joy.... (getting repeating lines in the txt file!) The problem seems to be that it is not checking all values in $Array2 against the first value before adding the line. If NOT StringInStr($tmp, $tmp2) Then FileWriteLine($new , $tmp & @CRLF) EndIf This code only checks against the current setting of $tmp2, not agaisn't all possible values in $Array2. I've tried adding the below code to set a variable if found or not. IF $tmp <> $tmp2 Then $chk = 1 Else $chk = 0 EndIf Then only execute FileWriteLine() if $chk = 1. This seems to work - but I'm still getting repeating lines! I'm working on it... Link to comment Share on other sites More sharing options...
Matt @ MPCS Posted September 30, 2004 Share Posted September 30, 2004 There is an alternative, build a string out of all of the elements of the second array and do a stringinstr compared to each value in the first array. I think that would look something like this: Dim $tmpString $tmpString = $Array2[1] For $x = 2 to Ubound($Array2) - 1 $tmpString = $tmpString & "|" & $Array2[$x] Next For $x = 1 to Ubound($Array1) - 1 $tmp = $Array1[$x] If NOT StringInStr($tmpString, $tmp) Then FileWriteLine($new , $tmp & @CRLF) EndIf Next That should work at least conceptually. *** Matt @ MPCS Link to comment Share on other sites More sharing options...
Valik Posted September 30, 2004 Share Posted September 30, 2004 (edited) Array indexing starts at 0 unless you created the array from StringSplit(), in which case, AutoIt provides a convience by having element[0] report the number of items in the array. If you aren't using StringSplit() to create your array(s), then the code needs to be changed to start from 0. Edited September 30, 2004 by Valik Link to comment Share on other sites More sharing options...
Matt @ MPCS Posted September 30, 2004 Share Posted September 30, 2004 You are right Valik.. I get mixed around while helping people with VB. Here is modified code that should work: Dim $tmpString $tmpString = $Array2[0] For $x = 1 to Ubound($Array2) - 1 $tmpString = $tmpString & "|" & $Array2[$x] Next For $x = 0 to Ubound($Array1) - 1 $tmp = $Array1[$x] If NOT StringInStr($tmpString, $tmp) Then FileWriteLine($new , $tmp & @CRLF) EndIf Next Link to comment Share on other sites More sharing options...
mlister Posted September 30, 2004 Author Share Posted September 30, 2004 Matt, Code works greats - I am using StringSplit() to fill the arrays so I've changed it accordingly. thanks for your help Link to comment Share on other sites More sharing options...
Valik Posted September 30, 2004 Share Posted September 30, 2004 (edited) Very bad idea, Matt. What happens if $tmp happens to be a substring of one of the items in $tmpstring. You'll get a false result.The nested loops are the way to go, they just need to start at 0, not 1.Edit: Maybe not, the wording was very confusing. I only figured out what they wanted to do by looking at the code. What you have posted, Matt, does seem to be what they want. Edited September 30, 2004 by Valik 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