Welcome to Synthiam!

The easiest way to program the most powerful robots. Use technologies by leading industry experts. ARC is a free-to-use robot programming software that makes servo automation, computer vision, autonomous navigation, and artificial intelligence easy.

Get Started
Asked — Edited

Using Substring With An Array

Again I cannot see what I am doing wrong.
Is this another bug or am I using the array incorrectly?
This works

Code:


DefineArray($TestArray,2)
$SearchString = "aaaa"
$TestArray[1] = "<aaaa><bbbb><cccc>"

if($SearchString = SubString($TestArray[1],1,4))

Print("Correct")

endif



This Dont

Code:


if($SearchString = SubString($TestArray[1],1,IndexOf($TestArray[1],"><")))


ARC Pro

Upgrade to ARC Pro

Become a Synthiam ARC Pro subscriber to unleash the power of easy and powerful robot programming

AI Support Bot
Related Content
Synthiam
Based on your post activity, we found some content that may be interesting to you. Explore these other tutorials and community conversations.
#1  
You have one too many closing brackets in this line...

Code:


if($SearchString = SubString($TestArray[1],1,4)))


***Edit*** never mind you fixed it...
PRO
USA
#2  
@RichardR
I tried to simplify the expression, and didn't remove the extra closing bracket.
But when I did simplify it, it did work.
PRO
USA
#3  
Still have the issue with the IndexOf with in the expression
PRO
USA
#4  
If I use a variable in the expression it works.

Code:


DefineArray($TestArray,2)
$SearchString = "aaaa"
$TestArray[1] = "<aaaa><bbbb><cccc>"

$TestIndex = IndexOf( $TestArray[1],1,"><" ) -1

if($SearchString = SubString($TestArray[1],1,$TestIndex))

Print("Correct")

endif
PRO
USA
#5  
@rz90208

EZ-Script is good for simple scripts, and i believe it was developed for simple statements.

there are no expression trees or byte code translation the script lines/statements are evaluated on the fly using a text parser and the things can get complicated with nested conditions, multiples arguments, operators etc.

with that in mind you have some options:

1) Simplify the expressions like using variables, remember everything is evaluated on the fly so replace multiple function calls assigning the function result to a variable and reusing the variable to check the result.

2) Avoid nested expressions

3) Avoid complex scripts when possible

OR

1) Learn c# and create a plugin

2) use the DJ's Javascript plugin:

https://synthiam.com/redirect/legacy?table=plugin&id=224

the plugin uses a Javascript Interpreter for .NET (Jint) https://github.com/sebastienros/jint

Is not fast as c# code but it's well known, and if you find a language/parser issue you can open a ticket.
PRO
USA
#6  
Thanks ptp,
I did just that and simplified the script using variables.
It is not easy to build even a simple brain and not write complex scripts.
I do know some JavaScript, would be nice to have a script manager for js as we do for ez-script.
Thanks again for your reply.
PRO
Synthiam
#7  
This code works perfect

Code:


definearray($testarray, 2)

$searchstring = "aaaa"

$testarray[1] = "<aaaa><bbbb><cccc>"

IF ($searchString = substring($testarray[1], 1, 4))

print("correct")

ENDIF


User-inserted image


And so does this, by adding spaces (for some reason) with proper code formatting

Code:


DefineArray($TestArray,2)
$SearchString = "aaaa"
$TestArray[1] = "<aaaa><bbbb><cccc>"

if($SearchString = SubString($TestArray[1], 1, IndexOf($TestArray[1], "><")))

Print("Correct")

endif


User-inserted image



If you wish to use javascript, use the javascript plugin from here: https://synthiam.com/redirect/legacy?table=plugin&id=224
PRO
USA
#8  
@DJ,

To help troubleshoot:

Code:


DefineArray($ArrayOfStrings,2)
$ArrayOfStrings[0] = "foo;bar;baz"
$SearchString = "foo"

#this works
$index1=IndexOf($ArrayOfStrings[0],";" )
if($SearchString=SubString($ArrayOfStrings[0],0,$index1,";" ))
print("1: starts with foo" )
endif

#this works too
$String1=$ArrayOfStrings[0]
if($SearchString=SubString($String1,0,IndexOf($String1,";" )))
print("2: starts with foo" )
endif

#The code below works with a space before the IndexOf
if($SearchString=SubString($ArrayOfStrings[0],0, IndexOf($ArrayOfStrings[0],";" ) ))
print("3: starts with foo" )
endif

#The code below does not work
#Error on line 24: Variable is an array: $ArrayOfStrings
if($SearchString=SubString($ArrayOfStrings[0],0,IndexOf($ArrayOfStrings[0],";" )))
print("4: starts with foo" )
endif


EDIT: I've changed the code with several combinations, a space before the IndexOf does the trick
PRO
Synthiam
#9  
Okay - i fixed it for next release. There was a goof in the regex


User-inserted image
PRO
USA
#10  
Thank you again DJ.
My son tells me to start using JavaScript also, but I love using EZ-Script it is so EZ and powerful.

Thank you also ptp