function_return l_sReturn \r
end_function\r
\r
-// Return none blank of two strings\r
+// Return one blank of two strings\r
function nbstring global string argv string argv2 returns string\r
if (argv <> "") function_return argv\r
else if (argv2 <> "") function_return argv2\r
function_return l_sReturn\r
end_function\r
\r
+// Check if a string looks like a valid dataflex number\r
+//True\r
+// showln (is_number("99999999999999.99999999")) (is_number("-99999999999999.99999999"))\r
+// showln (is_number("99999999999999.0")) (is_number("0")) (is_number("-0")) (is_number("100"))\r
+//False\r
+// showln (is_number("99999999999999.999999999")) (is_number("-999999999999999.99999999"))\r
+// showln (is_number("999999999999999.99999999")) (is_number("1-0")) (is_number(".0D"))\r
+// showln (is_number("")) (is_number("-")) (is_number("100A")) (is_number("A100"))\r
+function is_number global string argv returns integer\r
+ local integer l_iChar l_iDec l_iNum l_iLen l_i l_iNeg\r
+ \r
+ move 0 to l_iNum \r
+ move 0 to l_iDec\r
+ \r
+ // Is the value negative\r
+ if (ascii(mid(argv,1,1)) = 45);\r
+ move 1 to l_iNeg\r
+ else;\r
+ move 0 to l_iNeg\r
+ \r
+ move (length(argv)) to l_iLen\r
+ \r
+ // Check basic length conforms to number\r
+ if ((l_iLen-L_iNeg = 0) or (l_iLen-l_iNeg > 23)) function_return 0\r
+ \r
+ //Check for non numerics\r
+ for l_i from (1+l_iNeg) to l_iLen\r
+ move (ascii(mid(argv,1,l_i))) to l_iChar\r
+ if ((l_iChar = 46) and ((l_iDec = 1) or (l_i > 15+l_iNeg))) break\r
+ if not ((l_iChar >= 48) and (l_iChar <= 57) or (l_iChar = 46)) break \r
+ if (l_iChar = 46);\r
+ move 1 to l_iDec\r
+ increment l_iNum\r
+ loop\r
+ \r
+ function_return ((l_iNum+l_iNeg) = l_iLen)\r
+end_function\r
+\r
+\r
+// Check if a string looks like a valid dataflex integer\r
+//True\r
+// showln (is_integer("2147483647")) (is_integer("2147483638")) \r
+// showln (is_integer("-2147483647")) (is_integer("-2147483648")) \r
+// showln (is_integer("0")) (is_integer("-0"))\r
+//False\r
+// showln (is_integer("214748364 ")) (is_integer("2147483648")) (is_integer("2947483647"))\r
+// showln (is_integer("-2147483649")) (is_integer("21474836478")) (is_integer("21474836470"))\r
+// showln (is_integer("-21474836470")) (is_integer("214748364A")) (is_integer("-A"))\r
+// showln (is_integer("-214748364A")) (is_integer("-")) (is_integer("-21474B364P"))\r
+function is_integer global string argv returns integer\r
+ local integer l_iChar l_iInt l_iLen l_i l_iNeg \r
+ \r
+ move 0 to l_iInt\r
+ move (length(argv)) to l_iLen\r
+ \r
+ //Is the value negative\r
+ if (ascii(mid(argv,1,1)) = 45);\r
+ move 1 to l_iNeg\r
+ else;\r
+ move 0 to l_iNeg \r
+ \r
+ // Check basic length conforms to integer\r
+ if ((l_iLen-L_iNeg = 0) or (l_iLen-l_iNeg > 10)) function_return 0 \r
+ \r
+ //Check for non numerics\r
+ for l_i from (1+l_iNeg) to l_iLen\r
+ move (ascii(mid(argv,1,l_i))) to l_iChar\r
+ if not ((l_iChar >= 48) and (l_iChar <= 57)) break\r
+ increment l_iInt\r
+ loop\r
+\r
+ //Check for 32 bit signed integer bounds\r
+ if ((l_iLen-l_iNeg = 10) and ((l_iInt+l_iNeg) = l_iLen)) begin \r
+ if (integer(mid(argv,9,1+l_iNeg)) > 214748364);\r
+ function_return 0\r
+ if (integer(mid(argv,9,1+l_iNeg)) = 214748364) begin \r
+ if (integer(mid(argv,1,10+l_iNeg)) > 7+l_iNeg);\r
+ function_return 0\r
+ end\r
+ end\r
+ \r
+ function_return ((l_iInt+l_iNeg) = l_iLen)\r
+end_function\r
+\r
//-------------------------------------------------------------------------\r
// Classes\r
//-------------------------------------------------------------------------\r
// String tokenizer class\r
//\r
// Send message methods:\r
-// set_string <string> <delimiter> - Send the string to be tokenized and the delimiter to split on\r
-// set_string_csv <string> - Send a CSV string to be tokenized. As per general CSV data:\r
-// * Items containting commas to be enclosed in double quotes: '"'\r
-// * Double quotes in quotes to be escaped with a backslash: '\'\r
-// \r
+// set_string <string> <delimiter> - Send the string to be tokenized and the delimiter to split on\r
+// set_string_csv <string> - Send a CSV string to be tokenized. As per general CSV data:\r
+// * Items containting commas to be enclosed in double quotes: '"'\r
+// * Double quotes in quotes to be escaped with a backslash: '\'\r
+// \r
// Set methods:\r
// token_value \r
//\r
set c_iTokens to l_iTokens\r
end_procedure\r
\r
- procedure set_string_csv string argv \r
- local integer l_i l_iQuot l_iTokens\r
- local string l_sChar l_sLast l_sNext l_sBuf\r
- \r
- move -1 to l_iTokens\r
- move 0 to l_iQuot\r
- move "" to l_sLast\r
- \r
- for l_i from 0 to (length(argv))\r
- move (mid(argv,1,l_i)) to l_sChar\r
- move (mid(argv,1,l_i+1)) to l_sNext\r
- move (mid(argv,1,l_i-1)) to l_sLast \r
- \r
- if ((l_iQuot) and (l_sChar = '\') and (l_sNext = '"')) break begin\r
- \r
- if ((l_sChar = '"') and (l_sLast <> '\')) begin\r
- if (l_iQuot) move 0 to l_iQuot\r
- else move 1 to l_iQuot\r
- end\r
- if ((l_sChar = '"') and (l_sLast <> '\')) break begin \r
- \r
- if ((l_sChar = ',') and not (l_iQuot)) begin\r
- //fwd to Array\r
- increment l_iTokens\r
- forward set array_value item l_iTokens to l_sBuf\r
- move "" to l_sBuf\r
- end\r
- if ((l_sChar = ',') and not (l_iQuot)) break begin\r
- \r
- append l_sBuf l_sChar\r
- loop\r
- \r
- //fwd to Array\r
- increment l_iTokens \r
- forward set array_value item l_iTokens to l_sBuf\r
+ procedure set_string_csv string argv \r
+ local integer l_i l_iQuot l_iTokens\r
+ local string l_sChar l_sLast l_sNext l_sBuf\r
+ \r
+ move -1 to l_iTokens\r
+ move 0 to l_iQuot\r
+ move "" to l_sLast\r
+ \r
+ for l_i from 0 to (length(argv))\r
+ move (mid(argv,1,l_i)) to l_sChar\r
+ move (mid(argv,1,l_i+1)) to l_sNext\r
+ move (mid(argv,1,l_i-1)) to l_sLast \r
+ \r
+ if ((l_iQuot) and (l_sChar = '\') and (l_sNext = '"')) break begin\r
+ if ((l_iQuot) and (l_sChar = '\') and (l_sNext = '\')) break begin\r
+ \r
+ if ((l_sChar = '"') and (l_sLast <> '\')) begin\r
+ if (l_iQuot) move 0 to l_iQuot\r
+ else move 1 to l_iQuot\r
+ end\r
+ if ((l_sChar = '"') and (l_sLast <> '\')) break begin \r
+ \r
+ if ((l_sChar = ',') and not (l_iQuot)) begin\r
+ //fwd to Array\r
+ increment l_iTokens\r
+ forward set array_value item l_iTokens to l_sBuf\r
+ move "" to l_sBuf\r
+ end\r
+ if ((l_sChar = ',') and not (l_iQuot)) break begin\r
+ \r
+ append l_sBuf l_sChar\r
+ loop\r
+ \r
+ //fwd to Array\r
+ increment l_iTokens \r
+ forward set array_value item l_iTokens to l_sBuf\r
\r
- set c_iTokenOn to 0 \r
+ set c_iTokenOn to 0 \r
set c_iTokens to l_iTokens\r
- end_procedure \r
+ end_procedure \r
\r
procedure set token_value integer itemx string val\r
forward set array_value item itemx to val\r