Single Camera Servo Server icon Single Camera Servo Server TCP video server for Unity clients to stream camera video and send servo positions to ARC for remote robot control Try it →
USA
Asked — Edited
Resolved Resolved by DJ Sures!

Expression Parser Broken - Length Function

The code below does not work:


1: ClearVariables()
2: $buffer = "foo;bar;quux"
3: $sepPos = 3
4: $len0 = Length($buffer)-$sepPos-1

error:

Quote:

Error on line 4: Operator '-' invalid for strings.

1st attempt with a different code:


1: ClearVariables() 
2: $buffer = "foo;bar;quux"
3: $sepPos = 3
4: $len1 = Length($buffer) - $sepPos
5: $len1 = $len1 - $sepPos

same error.

2nd attempt (success)


1: ClearVariables() 
2: $buffer = "foo;bar;quux"
3: $sepPos = 3
4: $len2 = Length($buffer)
5: $len2 = $len2 - $sepPos - 1

it seems the the parser assumes Length function returns a string ?


ARC Pro

Upgrade to ARC Pro

ARC Pro is more than a tool; it's a creative playground for robot enthusiasts, where you can turn your wildest ideas into reality.

#1  

Quote:

1st attempt with a different code:

Code:


1: ClearVariables() 
2: $buffer = "foo;bar;quux"
3: $sepPos = 3
4: $len1 = Length($buffer) - $sepPos
5: $len1 = $len1 - $sepPos

I ran into this issue myself, if you don't want to separate it over multiple lines you can cast the length in an int. I guess it is just one of the limitations of not declaring variable types.

Code:

ClearVariables()
$buffer = "foo;bar;quux"
$sepPos = 3
$len0 = CInt(Length($buffer)) - $sepPos-1
Print( $len0 ) 
Author Avatar
PRO
USA
#2  

yes is another away to skin the cat...

i had other similar issues with other functions too.

I don't agree with "it's just one of the limitations of not declaring variable types" mainly because of this:


$rLen1 = IndexOf($buffer, ";")-$len1-1

and it works, one function and two math operations.

Length() is returning the correct type (integer), only when combined behaves differently i'm guessing is really a parser issue.

#3  
 Length() is returning the correct type (integer), only when combined behaves differently i'm guessing is really a parser issue. 

Makes sense.

Author Avatar
PRO
Synthiam
LinkedIn Thingiverse Twitter YouTube GitHub
#4  

fixed in next release

Author Avatar
PRO
USA
#5  

Thanks

#6  

It seems I'm facing the same issue. I just installed the latest version of EZB...


$encoderBVAR = $encoderB - $var

if ($encoderA < $encoderBVAR)
  $forwardmustwait = 1
  $pwmFR  = $pwmFR +$mod
  $pwmRR  = $pwmRR +$mod
  $pwmFL  = $pwmFL -$mod
  $pwmRL  = $pwmRL -$mod
  $forwardmustwait = 0

endif

> Error on line 45: Operator '-' invalid for strings.
Done (00:00:00.5009241)
#7  

Just a guess here but try


$encoderBVAR = $encoderB - $var

if ($encoderA < $encoderBVAR)
  $forwardmustwait = 1
  $pwmFR  = $pwmFR + $mod
  $pwmRR  = $pwmRR + $mod
  $pwmFL  = $pwmFL - $mod
  $pwmRL  = $pwmRL - $mod
  $forwardmustwait = 0

endif
Author Avatar
PRO
Synthiam
LinkedIn Thingiverse Twitter YouTube GitHub
#8  

Elfge, Dave is right. You will need spaces between the operation commands.