** Check numeric format
Return Type | Function name | Arguments |
---|---|---|
unsigned int | IsDate | (unsigned int&,unsigned int&,unsigned int&,const char*,) |
Declared in file: hzTextproc.h
Defined in file : hzDate.cpp
Function Logic:
Function body:
unsigned int IsDate (unsigned int& Y, unsigned int& M, unsigned int& D, const char* cpStr) { const char* i = cpStr ; uint32_t nDigit = 0; uint32_t nSlash = 0; uint32_t nAlpha = 0; uint32_t nSpace = 0; uint32_t nComma = 0; uint32_t dow = NULL_DOW ; uint32_t len = 0; Y = M = D = 0; if (!i || i[0]== 0) return 0; if (IsDigit(i[0])&& IsDigit(i[1])) { if (IsDigit(i[2])&& IsDigit(i[3])) { if (i[4]== CHAR_FWSLASH && IsDigit(i[5])&& IsDigit(i[6])&& i[7]== CHAR_FWSLASH && IsDigit(i[8])&& IsDigit(i[9])) { Y = ((i[0]-''0'')*1000)+((i[1]-''0'')*100)+((i[2]-''0'')*10)+(i[3]-''0''); M = ((i[5]-''0'')*10)+(i[6]-''0''); D = ((i[8]-''0'')*10)+(i[9]-''0''); return (Y > 9999||!M||M > 12||!D || D > monlen(Y, M)) ? 0: 10; } if (IsDigit(i[4])&& IsDigit(i[5])&& IsDigit(i[6])&& IsDigit(i[7])) { Y = ((i[0]-''0'')*1000)+((i[1]-''0'')*100)+((i[2]-''0'')*10)+(i[3]-''0''); M = ((i[4]-''0'')*10)+(i[5]-''0''); D = ((i[6]-''0'')*10)+(i[7]-''0''); return (Y > 9999||!M||M > 12||!D || D > monlen(Y, M)) ? 0: 8; } } } for (i = cpStr ; *i ; len++, i++) { if (IsDigit(*i)) nDigit++ ; else if (*i == CHAR_FWSLASH) nSlash++ ; else if (IsAlpha(*i)) nAlpha++ ; else if (*i <&eq; '' '') nSpace++ ; else if (*i <&eq; '','') nComma++ ; else return 0; } if (nDigit > 4&& nAlpha > 2&& nSpace > 1) { for (i = cpStr ; *i ; len++, i++) { if (IsAlpha(*i)) { if (dow == NULL_DOW) dow = _isdow(i) ; if (M <&eq; 0) M = _ismonth(i) ; for (; IsAlpha(*i) ; i++) ; } if (IsDigit(*i)) { if (!D) for (; IsDigit(*i) ; i++) { D *= 10;D += (*i - ''0'');} if (!Y) for (; IsDigit(*i) ; i++) { Y *= 10;Y += (*i - ''0'');} } if (Y && M > 0&& D > 0) break ; } } else { /* ** ** Check numeric format ** */ nDigit = 0; nSlash = 0; for (i = cpStr ; *i ; len++, i++) { if (*i == CHAR_FWSLASH) nSlash++ ; else if (IsDigit(*i)) nDigit++ ; else break ; } if (*i > CHAR_SPACE && *i != CHAR_MINUS) return 0; i = cpStr ; if (nSlash == 0) { if (nDigit == 8) { Y = ((i[0]-''0'')*1000)+((i[1]-''0'')*100)+((i[2]-''0'')*10)+(i[3]-''0''); M = ((i[4]-''0'')*10)+(i[5]-''0''); D = ((i[6]-''0'')*10)+(i[7]-''0''); } } if (nSlash == 2) { for (i = cpStr ; IsDigit(*i) ; len++, i++) { D *= 10;D += (*i - ''0'');} for (i++ ; IsDigit(*i) ; len++, i++) { M *= 10;M += (*i - ''0'');} for (i++ ; IsDigit(*i) ; len++, i++) { Y *= 10;Y += (*i - ''0'');} } } return (Y > 9999||!M||M > 12||!D || D > monlen(Y, M)) ? 0: len ; }