| Return Type | Function name | Arguments |
|---|---|---|
| hzEcode | SplitCSV | (hzArray<hzString>&,const char*,char,) |
Declared in file: hzTextproc.h
Defined in file : hzTextproc.cpp
Function Logic:
Function body:
hzEcode SplitCSV (hzArray<hzString>& ar, const char* line, char cDelim)
{
hzChain C ;
const char* i ;
hzString S ;
ar.Clear() ;
i = line ;
if (!i || !i[0])
return E_ARGUMENT ;
if (!cDelim || cDelim == CHAR_DQUOTE)
cDelim = CHAR_COMMA ;
for (;;)
{
if (*i == CHAR_DQUOTE)
{
for (i++ ; *i ; i++)
{
if (*i == CHAR_BKSLASH)
{
if (i[1]== ''r''){i++ ; C.AddByte(CHAR_CR) ; continue ; }
if (i[1]== ''n''){i++ ; C.AddByte(CHAR_NL) ; continue ; }
if (i[1]== ''t''){i++ ; C.AddByte(CHAR_TAB) ; continue ; }
if (i[1]== ''"''){i++;C.AddByte(CHAR_DQUOTE);continue; }
}
if (i[0]== CHAR_DQUOTE && i[1]== CHAR_DQUOTE)
{ i++ ; C.AddByte(CHAR_DQUOTE) ; continue ; }
if (*i == CHAR_DQUOTE)
break ;
C.AddByte(*i) ;
}
if (*i == CHAR_DQUOTE)
i++ ;
else
break ;
}
if (*i == 0|| *i == cDelim)
{
S = C ; ar.Add(S) ; C.Clear() ; S.Clear() ;
if (*i == 0)
break ;
i++ ;
continue ;
}
if (*i == CHAR_BKSLASH)
{
if (i[1]== ''r''){i++ ; C.AddByte(CHAR_CR) ; continue ; }
if (i[1]== ''n''){i++ ; C.AddByte(CHAR_NL) ; continue ; }
if (i[1]== ''t''){i++ ; C.AddByte(CHAR_TAB) ; continue ; }
if (i[1]== ''"''){i++;C.AddByte(CHAR_DQUOTE);continue; }
}
C.AddByte(*i) ;
i++ ;
}
return E_OK ;
}