Jump to content
algiuxas

[Solved] ArraySearch doesn't work when using $array[0] = 0

Recommended Posts

algiuxas

Hello everybody, so I might found a bug in _ArraySearch:
 

#include <Array.au3>
Local $abc[2] = ["b", "b"]
$h = "+---------------------------------+" & @CRLF
ConsoleWrite($h)
For $i = 0 To 1
    $abc[0] = 0
    out()
    $abc[0] = 1
    out()
    $abc[0] = -1
    out()
    $abc[0] = "Abc"
    out()
    $abc[1] = "Hello"
Next
Func txt()
    Return "$abc = [" & $abc[0] & ", " & $abc[1] & "]" & @CRLF & _
            "> _ArraySearch($abc,""Hello"") = "
EndFunc   ;==>txt
Func shouldoutput($ans)
    Return "_ArraySearch Should return:  " & ($ans ? 1 : -1)
EndFunc   ;==>shouldoutput
Func out()
    ConsoleWrite("> " & txt() & _ArraySearch($abc, "Hello") & @CRLF & "> " & shouldoutput($abc[1] == "Hello") & @CRLF & $h)
EndFunc   ;==>out
Exit

Sorry for this messy script

Edited by algiuxas

42783.png

Share this post


Link to post
Share on other sites
MattHiggs
8 minutes ago, algiuxas said:

 

Edited by MattHiggs

Share this post


Link to post
Share on other sites
algiuxas
2 minutes ago, MattHiggs said:

 

That says a lot.


42783.png

Share this post


Link to post
Share on other sites
MattHiggs
10 minutes ago, algiuxas said:

Hello everybody, so I might found a bug in _ArraySearch:
 

#include <Array.au3>
Local $abc[2] = ["b", "b"]
$h = "+---------------------------------+" & @CRLF
ConsoleWrite($h)
For $i = 0 To 1
    $abc[0] = 0
    out()
    $abc[0] = 1
    out()
    $abc[0] = -1
    out()
    $abc[0] = "Abc"
    out()
    $abc[1] = "Hello"
Next
Func txt()
    Return "$abc = [" & $abc[0] & ", " & $abc[1] & "]" & @CRLF & _
            "> _ArraySearch($abc,""Hello"") = "
EndFunc   ;==>txt
Func shouldoutput($ans)
    Return "_ArraySearch Should return:  " & ($ans ? 1 : -1)
EndFunc   ;==>shouldoutput
Func out()
    ConsoleWrite("> " & txt() & _ArraySearch($abc, "Hello") & @CRLF & "> " & shouldoutput($abc[1] == "Hello") & @CRLF & $h)
EndFunc   ;==>out
Exit

Sorry for this messy script

Yeah, I can't even begin to interpret what you are trying to accomplish here.  But first thing that needs to be clarified is WHICH parameter you believe is throwing the error when set to 0.  But even given that, I notice that your _Arraysearch function uses the default values in the script you provided, so I am not sure what you are saying is broken.

Share this post


Link to post
Share on other sites
algiuxas
Just now, MattHiggs said:

Yeah, I can't even begin to interpret what you are trying to accomplish here.  But first thing that needs to be clarified is WHICH parameter you believe is throwing the error when set to 0.  But even given that, I notice that your _Arraysearch function uses the default values in the script you provided, so I am not sure what you are saying is broken.

+---------------------------------+
> $abc = [0, b]
> _ArraySearch($abc,"Hello") = 0
> _ArraySearch Should return:  -1
+---------------------------------+
> $abc = [1, b]
> _ArraySearch($abc,"Hello") = -1
> _ArraySearch Should return:  -1
+---------------------------------+
> $abc = [-1, b]
> _ArraySearch($abc,"Hello") = -1
> _ArraySearch Should return:  -1
+---------------------------------+
> $abc = [Abc, b]
> _ArraySearch($abc,"Hello") = -1
> _ArraySearch Should return:  -1
+---------------------------------+
> $abc = [0, Hello]
> _ArraySearch($abc,"Hello") = 0
> _ArraySearch Should return:  1
+---------------------------------+
> $abc = [1, Hello]
> _ArraySearch($abc,"Hello") = 1
> _ArraySearch Should return:  1
+---------------------------------+
> $abc = [-1, Hello]
> _ArraySearch($abc,"Hello") = 1
> _ArraySearch Should return:  1
+---------------------------------+
> $abc = [Abc, Hello]
> _ArraySearch($abc,"Hello") = 1
> _ArraySearch Should return:  1
+---------------------------------+

You can see it returns incorrectly when the first array value is 0.


42783.png

Share this post


Link to post
Share on other sites
Jos

Sometimes it would help when one first dumb things down to the basics to show their issue. ;)

Have a look at this and see if you can figure out why you get your "error":

#include <Array.au3>
Local $abc[2] = [0, 1]
ConsoleWrite('_ArraySearch($abc, "ABC") = ' & _ArraySearch($abc, "ABC") & ' >Error code: ' & @error & @CRLF)
ConsoleWrite('_ArraySearch($abc, 0) = ' & _ArraySearch($abc, 0) & ' >Error code: ' & @error & @CRLF)
ConsoleWrite('_ArraySearch($abc, 1) = ' & _ArraySearch($abc, 1) & ' >Error code: ' & @error & @CRLF)
ConsoleWrite('_ArraySearch($abc, "ABC", Default, Default, Default, 3) = ' & _ArraySearch($abc, "ABC", Default, Default, Default, 3) & ' >Error code: ' & @error & @CRLF)
ConsoleWrite('_ArraySearch($abc, 0, Default, Default, Default, 3) = ' & _ArraySearch($abc, 0, Default, Default, Default, 3) & ' >Error code: ' & @error & @CRLF)
ConsoleWrite('_ArraySearch($abc, 1, Default, Default, Default, 3) = ' & _ArraySearch($abc, 1, Default, Default, Default, 3) & ' >Error code: ' & @error & @CRLF)

Jos

Edited by Jos
  • Like 1

SciTE4AutoIt3 Full installer Download page   - Beta files       Read before posting     How to post scriptsource        Forum Rules
 
Live for the present,
Dream of the future,
Learn from the past.
  :)

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

  • Similar Content

    • nooneclose
      By nooneclose
      My program has to first search for names in Column D that do not match up with column C. I got that search to work using arrays. It was slow and I could not figure out how to delete them so I just manually put coded the names that do not belong. I found their cell location but I do not know how to store that location and delete it.
      This is what I have so far.
      Local $NameToDelete1[6]  = _Excel_RangeFind($OpenWorkbook, "Smith, Bill") _ArrayDisplay($NameToDelete1, "Excel UDF: _Excel_RangeFind Example 1", "", 0, "|", "Sheet|Name|Cell|Value|Formula|Comment") _Excel_RangeDelete($OpenWorkbook.ActiveSheet, $NameToDelete1[2], $xlShiftUp)  
      Please help, I wanted to have this program done yesterday but I did not see this problem until yesterday. 
    • Skeletor
      By Skeletor
      Hi Virtual People,
      My array works perfectly fine. However, what is the best practice if the line in the array doesn't have the correct amount of columns and if I can add a placeholder?

       
      For $count = 1 To _FileCountLines($FileRead1) Step 1 $string = FileReadLine($FileRead1, $count) $input = StringSplit($string, ",", 1) $value1 = $input[1] $value2 = $input[2] $value3 = $input[3] _Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $value2, "A1") _Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $value1, "B1") _Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $value3, "C1") Next  
    • MrCheese
      By MrCheese
      hi all,
      reviewing the forum, this thread is applicable: 
       
       
      I wanted to know if there is now a better way to do this?
      In essence, I load a tab delimited txt file into an array (works well). I used tab, as some fields in the original csv contains commas.
      However, I needed autoit to manipulate this array, and output it as a csv.
      IF my array contains items with a comma, without double quotes around the field, then how best do I get a csv out of this?
      My current workaround is to filewritefromarray tab delimited, then open it in excel and save as a csv. I will need to check this to see how the address fields behave that contain a comma.
       
      Any thoughts would be appreciated.
       
    • Skeletor
      By Skeletor
      Hi All,

      I would like to know how you would take a FileLineRead and insert it into an array which then inserts it into Excel?
      One thing to know is the files content is broken up, so I only use half of the content within $FileRead1.
      So its imperative that the $value1, $value2, etc variables be used. 
      Code below:
      $FileRead1 = FileReadLine("C:\temp\sample.txt",1) For $count = 1 To _FileCountLines($FileRead1) Step 1 $string = FileReadLine($FileRead1, $count) $input = StringSplit($string, ",", 1) $value1 = $input[1] $value2 = $input[2] $value3 = $input[3] $value4 = $input[4] _Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $value1, "A1") _Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $value2, "B1") _Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $value3, "C1") _Excel_RangeWrite($oWorkbook, $oWorkbook.Activesheet, $value4, "D1") Next  
    • AnonymousX
      By AnonymousX
      Hello,
      I'm trying to write a script that moves copies excel cells into an array. I'll than manipulate the values and send array into another program. 
      I don't want range to be specific to a workbook, or sheet, or set of cells.
      I want user to be able to highlight desired cells and to copy either normally ("Ctrl+C") or by a hotkey ("Alt+C"). 
      Could someone help me with this?
      Thank you,
      I've tried to write the framework: (edited)
      #include <MsgBoxConstants.au3> #include <Array.au3> #include <Excel.au3> HotKeySet("!v", "Pastedata") While True Sleep(1000) WEnd func Makearray() local $bArray ;User has cells already copied ;Convert clipboard into an array ;I don;t know how excel stores data to clipboard so don;t know how to bring it into array _Arraydisplay($bArray) MsgBox(0,0,$bArray) return $bArray endfunc func Pastedata() Local $aArray MsgBox(0,0,"wait",1) ;make array based on assumption user has already copied a range to clipboard $aArray = Makearray() ;paste code ;don;t worry about this I got the rest endfunc  
×