10-25-2019, 02:21 AM
Please look at behavior described below, and tell me whether it's a bug, or I am doing something wrong.
The User's Manual defines behavior of RIGHT as follows:
Returns the last n characters of string str. If n <= 0, returns empty string. If n > DIM(str), returns str
Example: RIGHT("MOMOGUMBO",5) returns "GUMBO"
The attached example clearly shows that the character pointed by the argument is included in the resulting string. Thus, if we point to the last character of the string, we should get the last character of the string as a result. (Technically it will be a string consisting of one character, but let's use the name "character" to avoid confusing input and output strings.)
Please run the following program:
The result will be:
[1]==1
[2]==2
[3]==D
Length==3
12D
D
(Run on the simulator.)
In other words, if the RIGHT command is used, and the pointer points to the last character in the string, HPP "thinks" that it points beyond the string, and returns entire string rather than one character.
Darius
The User's Manual defines behavior of RIGHT as follows:
Returns the last n characters of string str. If n <= 0, returns empty string. If n > DIM(str), returns str
Example: RIGHT("MOMOGUMBO",5) returns "GUMBO"
The attached example clearly shows that the character pointed by the argument is included in the resulting string. Thus, if we point to the last character of the string, we should get the last character of the string as a result. (Technically it will be a string consisting of one character, but let's use the name "character" to avoid confusing input and output strings.)
Please run the following program:
Code:
#pragma mode( separator(.,;) integer(h64) )
EXPORT TEST_RIGHT()
BEGIN
LOCAL sString :="12D";
PRINT();
// verify indices
PRINT("[1]=="+CHAR(sString(1)));
PRINT("[2]=="+CHAR(sString(2)));
PRINT("[3]=="+CHAR(sString(3)));
// verifiy length
PRINT("Length=="+DIM(sString));
// attempt extracting substrings
PRINT(RIGHT(sString,3)); // should return "D", but returns "12D
PRINT(MID(sString,3,1)); // should return "D", and it does
WAIT(-1);
END;
[1]==1
[2]==2
[3]==D
Length==3
12D
D
(Run on the simulator.)
In other words, if the RIGHT command is used, and the pointer points to the last character in the string, HPP "thinks" that it points beyond the string, and returns entire string rather than one character.
Darius