** 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 ;
}