Welcome to Synthiam!

Program robots using technologies created from industry experts. ARC is our free-to-use robot programming software that makes features like vision recognition, 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],"><")))

AI Support Bot
Related Content
Synthiam
#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...
#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.
#3  
Still have the issue with the IndexOf with in the expression
#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
#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.
#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.
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
#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
Synthiam
#9  
Okay - i fixed it for next release. There was a goof in the regex


User-inserted image
#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