Jump to content

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


Recommended Posts

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

After switching years ago to Linux, sadly I don't use AutoIt anymore.

Link to post
Share on other sites
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.

Link to post
Share on other sites
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.

After switching years ago to Linux, sadly I don't use AutoIt anymore.

Link to post
Share on other sites
  • Developers

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

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

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
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By TheAlienDoctor
      Hi, I was looking into creating a script that would detect if a file exists, then move it (and in some cases rename it, depending on the file) as well as write to a log file.
      The issue is, there is a lot of files that need to be moved, sometimes some files will exist and others won't depending on the use-case. However if a file does exist, it will always be going into the same directory with the same name.
      Currently I have an array nested inside of the array, with each array inside that array having both the old and new directory, and then a For loop to actually run through and do the file transferring. The issue I am having is how to call the Array inside of the array, because how do I specify  which the old directory is and which the new is?
      Global $FileTransfer[2000] = [Global $Dir1[2] = ["original dir 1", "new dir 1"], Global $Dir2[2] = ["original dir 2", "new dir 2"]] For $FileTransfer = [0] To [1] Step +1 If FileExists({original dir}) Then FileMove({original dir}, new dir, 1) FileOpen("log.latest.txt", 1) FileWrite("log.latest.txt", "{original dir} found, moved it to new dir." & @CRLF) FileClose("log.latest.txt") Else FileOpen("log_latest.txt", 1) FileWrite("log_latest.txt", "{original dir} not found, ignoreing it." & @CRLF) FileClose("log_latest.txt") EndIf Next I have put what I want the old and new directory to be for each array in {}, so hopefully its easier to tell which part is working and whats not.

      I am still reasonably new to AutoIT, any help is appreciated. Thankyou
    • By arunkw
      I have a spreadsheet - daily routine which has two columns: activity and time as shown here
      | Activity             | Time     | |----------------------|----------| | Sleep               |  6:00 am | | Toilet              |  6:15 am | | Get ready for gym  |  6:30 am | | Exercise            |  7:50 am | | ... more things      |  9:00 pm | | ... still more       | 10:45 pm | | Sleep               |  6:00 am |   I wanted to find out, say in C1 which activity is current for me using now() I.e., if it’s 6:45am on my watch, it should show me Exercise  in C1 Thanks to Adam D. PE, this formula works like magic to get the result =VLOOKUP(MOD(NOW(),1),{B2:B,A2:A},2,1)   Now, I want to reproduce same result in autoit, how to do that? To have easy solution say, I copy-paste spreadsheet data in array directly in code, right? Use for loop and run the above vlookup function and show the answer using tooltip. How to achieve this? please help.  
    • By goku200
      I have an Autoit script that lists files from a folder into an array list. Is there a way to separate the filenames by an underscore and include the id, version, name and date into separate columns in Excel.
      Example of filename:
      12345_v1.0_TEST Name [12345]_01.01.2022.html
      12345 would be in one column
      v1.0 would be in another column
      TEST Name [12345] would be in another column
      01.01.2022 would be in another column
      .html would be in another column
      Note: filenames always change each day.
      Here is my code that lists the files into column C and then writes the column Headers into Column D, E, F, G. Just need some help with separating them into columns by the _ delimiter
       
    • By ghetek
      Hi everybody!
      Apache Solr is an awesome search server that allows you to search through petabytes of data in milliseconds. It is used by many large organizations. It's kind of like MySQL with search in mind. 
      If you would like to get started, download Apache Solr and run the example command, "bin/solr start -e techproducts"
      Now the example in the UDF should work. I am looking for any advice at all before I post this into the examples area.
      here is a walkthrough of what is happening in the example
      Func Example() Local $sHost = '127.0.0.1', $sPort = 8983, $sContainer = 'techproducts', $sWow64 = "" If @AutoItX64 Then $sWow64 = "\Wow6432Node" Local $dir_autoit = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE" & $sWow64 & "\AutoIt v3\AutoIt", "InstallDir") Local $st_URL = 'http://' & $sHost & ':' & $sPort & '/solr/' & $sContainer ;First lets see if its running, start if it is not If _solr_Webping($st_URL) = -1 Then _solr_cmdstart($SOLR_HOME, $sContainer) ;Enable stream overlay so that we can send commands via URL _solr_enablestreamoverlay($st_URL) ;delete the example data _solr_Webdelall($st_URL, True) ;Lets define some values for a document Local $aPairs[5][2] = [ _ [4, Default], _ ['literal.id', 5], _ ['literal.value_s', 'anything'], _ ['literal.resourcename', 'API Errors Constants'], _ ['literal.indextime_dt',_solr_tnow()]] ;now package up the document with the values _Solr_uploadPkg($dir_autoit & '\Include\APIErrorsConstants.au3', $st_URL, $aPairs, Null, 'commit=true&overrideLiterals=true') ;whoops, lets make a change to a single field _solr_Webupdate($st_URL, '[{"id":"' & 5 & '","value_s" : {"set":"something"}}]') ;and commit that change _solr_Webcommit($st_URL) ;we can also upload files from the SimplePostTool _solr_jarpost($SOLR_HOME & '\example\exampledocs\post.jar', $sContainer, $dir_autoit & '\Include\GuiListView.au3', 'literal.id=6&literal.cat=Help Files&commit=true') ;now we can query for something Local $qry_response = _solr_Webselect($st_URL, 'q=$ERROR_VOLSNAP_PREPARE_HIBERNATE') Local $json_response = Json_Encode($qry_response) json_dump($json_response) ConsoleWrite(json_get($qry_response, '.response.docs[0].content[0]') & @CRLF) EndFunc ;==>Example  
      Thank you for your time!
      solr.au3 Json.au3 BinaryCall.au3
    • By mLipok
      Usually when I collect data from DataBase I need to give EndUser a possibility to select rows which should be taken in the processing loop.
      I was searching on the forum and I'm not able to find any UDF or even example of how to select data from array.
      I have my own solutions but I think they are not worth posting on the forum as it is very old code and I am looking for a better solution.

      Could anybody point me to some examples/solutions ?

      Thank you in advance.
      @mLipok
×
×
  • Create New...