From 4ba2e588798cf14ca3d3968a75b385661c0adfe6 Mon Sep 17 00:00:00 2001 From: luca Date: Wed, 14 Jul 2010 14:25:51 +0000 Subject: [PATCH] =?UTF-8?q?Patch=20level=20=20=20=20=20=20=20=20=20:10.0?= =?UTF-8?q?=20Files=20correlati=20=20=20=20=20:=20Ricompilazione=20Demo=20?= =?UTF-8?q?:=20[=20]=20Commento=20=20=20=20=20=20=20=20=20=20=20=20:=20agg?= =?UTF-8?q?iunta=20la=20funzione=20ZZEROFILL=20da=20usare=20nelle=20masche?= =?UTF-8?q?re=20(serve=20quando=20si=20ha=20un=20campo=20non=20zerofill=20?= =?UTF-8?q?e=20lo=20si=20deve=20confrontare=20con=20un=20altro=20che=20ive?= =?UTF-8?q?ce=20lo=20=C3=A8:=20vedi=20maschere=20di=20co0)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit git-svn-id: svn://10.65.10.50/trunk@20664 c028cbd2-c16b-5b4b-a496-9718f37d4682 --- include/expr.cpp | 16 +++++++++++++--- include/expr.h | 3 ++- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/include/expr.cpp b/include/expr.cpp index a3d0605db..ed01606e0 100755 --- a/include/expr.cpp +++ b/include/expr.cpp @@ -827,6 +827,13 @@ void TExpression::eval() evalstack.push(d.year()); } break; + case _zerofill: + { + const int len = evalstack.pop_real().integer(); + TString& s = evalstack.peek_string(); + s.right_just(len, '0'); + } + break; default: NFCHECK("operazione non valida %d", (int) instr.getsym()); break; @@ -846,14 +853,14 @@ HIDDEN char _tok[81]; 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", "EXP", "EXP10", "IF", "LEFT", "LEN", "LOG", "LOG10", "MAX", "MID", "MIN", "NUM", "PERC", "PI_CHECK","POW", "RIGHT", "ROUND", "SCORP", "SIN", "SQR", "SQRT", "STR", "SUBSTR", "TAN", "TRIM", "TRUNC", - "UPPER", "YEAR" }; + "UPPER", "YEAR", "ZEROFILL" }; HIDDEN TCodesym fntok[MAX_TOK] = { _ansi, _between, _ceil, _cfcheck, _cos, _exp, _exp10, _if, _left, _len, @@ -861,7 +868,7 @@ TCodesym TExpression::tok2fun(const char* tok) const _num, _perc, _picheck, _pow, _right, _round, _scorp, _sin, _sqr, _sqrt, _str, _substr, _tan, _trim, _trunc, - _upper, _year }; + _upper, _year, _zerofill }; int f = 0, l = MAX_TOK-1, i = MAX_TOK/2; for (;;) @@ -1011,10 +1018,12 @@ TCodesym TExpression::__gettoken() _tok[i] = '\0'; return _semicolon; case '(' : + case '{' : _tok[i++] = *(_s++); _tok[i] = '\0'; return _lpar; case ')' : + case '}' : _tok[i++] = *(_s++); _tok[i] = '\0'; return _rpar; @@ -1191,6 +1200,7 @@ TCodesym TExpression::__factor(TCodesym startsym) case _scorp: case _cfcheck: case _picheck: + case _zerofill: sym = __function(2); _code.add(startsym); break; diff --git a/include/expr.h b/include/expr.h index e32c54740..c914d0829 100755 --- a/include/expr.h +++ b/include/expr.h @@ -72,7 +72,8 @@ enum TCodesym { _between, // @emem controlla se il primo argomento e' compreso tra gli altri due _cfcheck, // @emem controlla il codice fiscale (+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