Sign in to follow this  
Followers 0
AllSystemGo

Problem after deleting item in array

7 posts in this topic

#1 ·  Posted (edited)

How can I make this work??

For $x = 1 to $aRecords[0]
        If $x = $aRecords[0] Then ExitLoop
        If StringInStr($aRecords[$x], $NomWin) Then
            _ArrayDelete($aRecords, $x)
            $aRecords[0] = $aRecords[0] - 1
        ElseIf StringInStr($aRecords[$x], $MAC) Then
            $aRecords[$x] = $MAC & " = " & $NomWin
            $found = True
        EndIf
    Next

I get this error: Array variable has incorrect number of subscripts or subscript dimension range exceeded.:

Probably because I'm deleting something from the array. How can I fix this??

EDIT: Is this a good way to fix it: If $x = _ArrayMaxIndex($aRecords, 1, 1) Then ExitLoop

EDIT2: NVM I think I found, I don't know if it's the good way to do it but I added a If $x = $aRecords[0] Then ExitLoop. I updated the code

Cheers

Edited by AllSystemGo

Share this post


Link to post
Share on other sites



Give it a try...

$x = 1
    While 1
        If $x = $aRecords[0] Then ExitLoop
        If StringInStr($aRecords[$x], $NomWin) Then
            _ArrayDelete($aRecords, $x)
            $aRecords[0] = UBound($aRecords) - 1
            $x = 0
        ElseIf StringInStr($aRecords[$x], $MAC) Then
            $aRecords[$x] = $MAC & " = " & $NomWin
            $found = True
        EndIf
        $x += 1
    Wend

AutoIt Scripts:NetPrinter - Network Printer UtilityRobocopyGUI - GUI interface for M$ robocopy command line

Share this post


Link to post
Share on other sites

IF I am correct...

_ArrayDelete($aRecords, $x)

$aRecords[0] = $aRecords[0] - 1

The second line is automatically done inside the _ArrayDelete() function

Open the include and read the function info

???

8)


NEWHeader1.png

Share this post


Link to post
Share on other sites

IF I am correct...

_ArrayDelete($aRecords, $x)

$aRecords[0] = $aRecords[0] - 1

The second line is automatically done inside the _ArrayDelete() function

No, I don't think it is. There is no parameter to tell the function if [0] is significant or not, and no basis for assumptions on that. Your script would have to include the second line to do the update of [0], and if so, it should probably be done with $aRecords[0] = Ubound($aRecords) - 1

:)


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

Share this post


Link to post
Share on other sites

Thank you for all the help, I already tried that but the thing is if I'm not mistaken the For doesn't update his parameters all the time cause he's stuck with let say For $x=1 to 700 even if I update the variable of the 700 to 699 it doens't change anything. Unless I didn't do it right.

Correct me if I'm wrong.

Share this post


Link to post
Share on other sites

How can I make this work??

For $x = 1 to $aRecords[0]
        If $x = $aRecords[0] Then ExitLoop
        If StringInStr($aRecords[$x], $NomWin) Then
            _ArrayDelete($aRecords, $x)
            $aRecords[0] = $aRecords[0] - 1
        ElseIf StringInStr($aRecords[$x], $MAC) Then
            $aRecords[$x] = $MAC & " = " & $NomWin
            $found = True
        EndIf
    Next

I get this error: Array variable has incorrect number of subscripts or subscript dimension range exceeded.:

Probably because I'm deleting something from the array. How can I fix this??

EDIT: Is this a good way to fix it: If $x = _ArrayMaxIndex($aRecords, 1, 1) Then ExitLoop

EDIT2: NVM I think I found, I don't know if it's the good way to do it but I added a If $x = $aRecords[0] Then ExitLoop. I updated the code

Cheers

A better way to handle this is walk the array backwards, because deletions will not change the index of other elements when going in reverse:
For $x = UBound($aRecords) - 1 To 1 Step -1
    If StringInStr($aRecords[$x], $NomWin) Then 
        _ArrayDelete($aRecords, $x)
    ElseIf StringInStr($aRecords[$x], $MAC) Then
        $aRecords[$x] = $MAC & " = " & $NomWin
        $found = True
    EndIf
Next
$aRecords[0] = UBound($aRecords) - 1; Update the new count in [0]

:)


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

Share this post


Link to post
Share on other sites

A better way to handle this is walk the array backwards, because deletions will not change the index of other elements when going in reverse:

For $x = UBound($aRecords) - 1 To 1 Step -1
    If StringInStr($aRecords[$x], $NomWin) Then 
        _ArrayDelete($aRecords, $x)
    ElseIf StringInStr($aRecords[$x], $MAC) Then
        $aRecords[$x] = $MAC & " = " & $NomWin
        $found = True
    EndIf
Next
$aRecords[0] = UBound($aRecords) - 1; Update the new count in [0]

:)

Worked like a charm.

Thank you everyone for the help.

Share this post


Link to post
Share on other sites

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 account

Sign in

Already have an account? Sign in here.


Sign In Now
Sign in to follow this  
Followers 0