* use where .F. to perform only parser phase. CREATE CURSOR test1 (fm M,fc C(200)) SELECT fm mr,fc cr from test1 WHERE .F. INTO CURSOR cResult ? TYPE('mr')-TRANSFORM(FSIZE('mr')),TYPE('cr')-TRANSFORM(FSIZE('cr')) * M4 ok ,C(200) ok SELECT fm+fm mr,fc+fc cr from test1 WHERE .F. INTO CURSOR cResult ? TYPE('mr')-TRANSFORM(FSIZE('mr')),TYPE('cr')-TRANSFORM(FSIZE('cr')) * C1 bad ,C(254) bad * I prefer M4,M4 SELECT LTRIM(fm) mr,LTRIM(fc) cr from test1 WHERE .F. INTO CURSOR cResult ? TYPE('mr')-TRANSFORM(FSIZE('mr')),TYPE('cr')-TRANSFORM(FSIZE('cr')) * C1 bad, C(200) ok * I prefer M4 SELECT RTRIM(fm) mr,RTRIM(fc) cr from test1 WHERE .F. INTO CURSOR cResult ? TYPE('mr')-TRANSFORM(FSIZE('mr')),TYPE('cr')-TRANSFORM(FSIZE('cr')) * C1 bad, C(200) ok * I prefer M4 SELECT 'A'+RTRIM(fm) mr,'A'+RTRIM(fc) cr from test1 WHERE .F. INTO CURSOR cResult ? TYPE('mr')-TRANSFORM(FSIZE('mr')),TYPE('cr')-TRANSFORM(FSIZE('cr')) * C1 bad ,C(200) ok * I prefer M4 x=SPACE(54) SELECT m.x+RTRIM(fm) mr,m.x+RTRIM(fc) cr from test1 WHERE .F. INTO CURSOR cResult ? TYPE('mr')-TRANSFORM(FSIZE('mr')),TYPE('cr')-TRANSFORM(FSIZE('cr')) * C54 bad ,C(254) ok * I prefer M4 x=SPACE(55) SELECT m.x+RTRIM(fm) mr,m.x+RTRIM(fc) cr from test1 WHERE .F. INTO CURSOR cResult ? TYPE('mr')-TRANSFORM(FSIZE('mr')),TYPE('cr')-TRANSFORM(FSIZE('cr')) * C55 bad ,C(254) bug * I prefer M4,M4 SELECT LEFT(fm,254) mr,LEFT(fc,254) cr from test1 WHERE .F. INTO CURSOR cResult ? TYPE('mr')-TRANSFORM(FSIZE('mr')),TYPE('cr')-TRANSFORM(FSIZE('cr')) * C254 bad, C254 OK * I prefer M4 SELECT LEFT(fm,255) mr,LEFT(fc,255) cr from test1 WHERE .F. INTO CURSOR cResult ? TYPE('mr')-TRANSFORM(FSIZE('mr')),TYPE('cr')-TRANSFORM(FSIZE('cr')) * C254 bad, C254 bad, i declare more 254 then i want memo * I prefer M4,M4 SELECT GETWORDNUM(fm,1) mr,GETWORDNUM(fc,1) cr from test1 WHERE .F. INTO CURSOR cResult ? TYPE('mr')-TRANSFORM(FSIZE('mr')),TYPE('cr')-TRANSFORM(FSIZE('cr')) * C1 bad, C1 bad * I prefer M4,M4 SELECT STREXTRACT(fm,'a') mr,STREXTRACT(fc,'a') cr from test1 WHERE .F. INTO CURSOR cResult ? TYPE('mr')-TRANSFORM(FSIZE('mr')),TYPE('cr')-TRANSFORM(FSIZE('cr')) * C1 bad, C1 bad * I prefer M4,M4 SELECT CHRTRAN(fm,'X','Y') mr,CHRTRAN(fc,'X','Y') cr from test1 WHERE .F. INTO CURSOR cResult ? TYPE('mr')-TRANSFORM(FSIZE('mr')),TYPE('cr')-TRANSFORM(FSIZE('cr')) * C1 bad, C1 bad * I prefer M4,M4 SELECT LOWER(fm) mr,LOWER(fc) cr from test1 WHERE .F. INTO CURSOR cResult ? TYPE('mr')-TRANSFORM(FSIZE('mr')),TYPE('cr')-TRANSFORM(FSIZE('cr')) * C1 bad, C200 ok * I prefer M4 SELECT PADR(fm,255) mr,PADR(fc,255) cr from test1 WHERE .F. INTO CURSOR cResult ? TYPE('mr')-TRANSFORM(FSIZE('mr')),TYPE('cr')-TRANSFORM(FSIZE('cr')) * C254 bad, C254 ok * I prefer M4I CAN think this:
SELECT SUBSTR(fm,1) mr,SUBSTR(fc,1) cr from test1 WHERE .F. INTO CURSOR cResult ? TYPE('mr')-TRANSFORM(FSIZE('mr')),TYPE('cr')-TRANSFORM(FSIZE('cr')) * M4 ok ,C(200) ok SELECT SUBSTR(fm+fm,1) mr,SUBSTR(fc+fc,1) cr from test1 WHERE .F. INTO CURSOR cResult ? TYPE('mr')-TRANSFORM(FSIZE('mr')),TYPE('cr')-TRANSFORM(FSIZE('cr')) * C1 bad ,C(254) bad * I prefer M4,M4 SELECT STRTRAN(fm,'x') mr,STRTRAN(fc,'x') cr from test1 WHERE .F. INTO CURSOR cResult ? TYPE('mr')-TRANSFORM(FSIZE('mr')),TYPE('cr')-TRANSFORM(FSIZE('cr')) * C1 bad ,C(200) ok * I prefer M4 SELECT ''+SUBSTR(fm,1) mr,''+SUBSTR(fc,1) cr from test1 WHERE .F. INTO CURSOR cResult ? TYPE('mr')-TRANSFORM(FSIZE('mr')),TYPE('cr')-TRANSFORM(FSIZE('cr')) * C1 bad ,C(200) ok * I prefer M4 * but SELECT SUBSTR(SUBSTR(fm,1),4) mr,SUBSTR(fc,1)+'' cr from test1 WHERE .F. INTO CURSOR cResult ? TYPE('mr')-TRANSFORM(FSIZE('mr')),TYPE('cr')-TRANSFORM(FSIZE('cr')) * M4 ok ,C(200) ok * because SUBSTR() retain memoOne single word: chaos.