Patch level :10.0

Files correlati     :
Ricompilazione Demo : [ ]
Commento            :
aggiunta la funzione ZZEROFILL da usare nelle maschere (serve quando si ha un campo non zerofill e lo si deve confrontare con un altro che ivece lo è: vedi maschere di co0)


git-svn-id: svn://10.65.10.50/trunk@20664 c028cbd2-c16b-5b4b-a496-9718f37d4682
This commit is contained in:
luca 2010-07-14 14:25:51 +00:00
parent 0a28e94038
commit 4ba2e58879
2 changed files with 15 additions and 4 deletions

View File

@ -827,6 +827,13 @@ void TExpression::eval()
evalstack.push(d.year()); evalstack.push(d.year());
} }
break; break;
case _zerofill:
{
const int len = evalstack.pop_real().integer();
TString& s = evalstack.peek_string();
s.right_just(len, '0');
}
break;
default: default:
NFCHECK("operazione non valida %d", (int) instr.getsym()); NFCHECK("operazione non valida %d", (int) instr.getsym());
break; break;
@ -846,14 +853,14 @@ HIDDEN char _tok[81];
TCodesym TExpression::tok2fun(const char* tok) const TCodesym TExpression::tok2fun(const char* tok) const
{ {
const int MAX_TOK = 32; const int MAX_TOK = 33;
HIDDEN const char* fnstr[MAX_TOK] = { "ANSI", "BETWEEN","CEIL", "CF_CHECK","COS", HIDDEN const char* fnstr[MAX_TOK] = { "ANSI", "BETWEEN","CEIL", "CF_CHECK","COS",
"EXP", "EXP10", "IF", "LEFT", "LEN", "EXP", "EXP10", "IF", "LEFT", "LEN",
"LOG", "LOG10", "MAX", "MID", "MIN", "LOG", "LOG10", "MAX", "MID", "MIN",
"NUM", "PERC", "PI_CHECK","POW", "RIGHT", "NUM", "PERC", "PI_CHECK","POW", "RIGHT",
"ROUND", "SCORP", "SIN", "SQR", "SQRT", "ROUND", "SCORP", "SIN", "SQR", "SQRT",
"STR", "SUBSTR", "TAN", "TRIM", "TRUNC", "STR", "SUBSTR", "TAN", "TRIM", "TRUNC",
"UPPER", "YEAR" }; "UPPER", "YEAR", "ZEROFILL" };
HIDDEN TCodesym fntok[MAX_TOK] = { _ansi, _between, _ceil, _cfcheck, _cos, HIDDEN TCodesym fntok[MAX_TOK] = { _ansi, _between, _ceil, _cfcheck, _cos,
_exp, _exp10, _if, _left, _len, _exp, _exp10, _if, _left, _len,
@ -861,7 +868,7 @@ TCodesym TExpression::tok2fun(const char* tok) const
_num, _perc, _picheck, _pow, _right, _num, _perc, _picheck, _pow, _right,
_round, _scorp, _sin, _sqr, _sqrt, _round, _scorp, _sin, _sqr, _sqrt,
_str, _substr, _tan, _trim, _trunc, _str, _substr, _tan, _trim, _trunc,
_upper, _year }; _upper, _year, _zerofill };
int f = 0, l = MAX_TOK-1, i = MAX_TOK/2; int f = 0, l = MAX_TOK-1, i = MAX_TOK/2;
for (;;) for (;;)
@ -1011,10 +1018,12 @@ TCodesym TExpression::__gettoken()
_tok[i] = '\0'; _tok[i] = '\0';
return _semicolon; return _semicolon;
case '(' : case '(' :
case '{' :
_tok[i++] = *(_s++); _tok[i++] = *(_s++);
_tok[i] = '\0'; _tok[i] = '\0';
return _lpar; return _lpar;
case ')' : case ')' :
case '}' :
_tok[i++] = *(_s++); _tok[i++] = *(_s++);
_tok[i] = '\0'; _tok[i] = '\0';
return _rpar; return _rpar;
@ -1191,6 +1200,7 @@ TCodesym TExpression::__factor(TCodesym startsym)
case _scorp: case _scorp:
case _cfcheck: case _cfcheck:
case _picheck: case _picheck:
case _zerofill:
sym = __function(2); sym = __function(2);
_code.add(startsym); _code.add(startsym);
break; break;

View File

@ -72,7 +72,8 @@ enum TCodesym {
_between, // @emem controlla se il primo argomento e' compreso tra gli altri due _between, // @emem controlla se il primo argomento e' compreso tra gli altri due
_cfcheck, // @emem controlla il codice fiscale (+stato) _cfcheck, // @emem controlla il codice fiscale (+stato)
_picheck, // @emem controlla la partita IVA (+stato) _picheck, // @emem controlla la partita IVA (+stato)
_year // @emem estrae l'anno da una data _year, // @emem estrae l'anno da una data
_zerofill // @emem riepie di zeri l'inizio di una stringa
}; };
// @doc INTERNAL // @doc INTERNAL