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

Synthiam ARC Pro is a new tool that will help unleash your creativity with programming robots in just seconds!

#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 ) 
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.

PRO
Synthiam
#4  

fixed in next release

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

PRO
Synthiam
#8  

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