On 09-08-2024 07:52, Wolfgang Lenerz via Ql-Users wrote:

without having looked at the string slicing code in SMSQE, I believe that the general contract is a$(x to y) where x and y are positive integers and y is bigger than, or equal to, x. If x is omitted, it is implied that it should be 1. If y is omitted, it is implied that it should be the size of the string (this explains j$ and k$).

So the examples where x is bigger than y will either return nothing (when x=y-1) or an error - as these are non-sensical in regard of the above contract, that doesn't bother me. This is why the line i$=a$(L to L-2) fails: x is bigger than y.

This is true even for the JS ROM, except that omitting x causes an error because JS assumes it's zero by default...

By exception, a$(0) returns the length of a$, so in the line d$=a$(0), d$ isn't 1, but 10. This is also why your line e$=a$(0 to 1) fails.

Both Minerva and SMSQ/E return the length of a string(0), JS returns 'out of range'.

Notes:

1 - If y is bigger than the size of the string, no error is generated, and it will be limited to the length of the string: Print a$(1 to 100) will just print the entire string.

Even true for JS.

But what if x is greater than LEN(a$)?
If LEN(a$)=10, then

- Both JS and SMSQ/E return 'array index out of range' with a$(11), but SMSQ/E returns empty string with a$(11 to 12)! (I believe older versions of SMSQ/E accepted a$(11) but Marcel changed that some years ago).

- Minerva returns empty string with a$(11) (but does not allow a$(12)). This is documented in the Minerva manual.

2 - Fun can be had with negative numbers - Norman Dunbar drew my attention to that.

One useful thing would be to allow negative numbers for x, meaning the 'x'th element from the *end* of the string. E.g. "abcdefgh"(-3 TO) would return "fgh". This avoids awkward constructs like a$(LEN(a$)-x+1 TO), you would just write a$(-x TO). Of course this would mean that y (if present) must be negative too, with a default of -1 rather than LEN(a$)...

Best Regards,

--
Jan Bredenbeek | Hilversum, NL | [email protected]
_______________________________________________
QL-Users Mailing List

Reply via email to