Return TypeFunction nameArguments
hzEcodeSplitCSV(hzArray<hzString>&,const char*,char,)

Declared in file: hzTextproc.h
Defined in file : hzTextproc.cpp

Function Logic:

0:START 1:hzArray::Clear i 2:!i||!i[0] 3:Return E_ARGUMENT 4:!cDelim||cDelim==(char)34 5:cDelim 6:; 7:*i==(char)34 8:*i; 9:*i==(char)92 10:i[1]=='r' 11:items hzChain::AddByte 12:i[1]=='n' 13:items hzChain::AddByte 14:i[1]=='t' 15:items hzChain::AddByte 16:i[1]=='"' 17:items hzChain::AddByte 18:i[0]==(char)34&&i[1]==(char)34 19:items hzChain::AddByte 20:*i==(char)34 21:hzChain::AddByte 22:*i==(char)34 23:items 24:*i==0||*i==cDelim 25:S hzArray::Add hzChain::Clear hzString::Clear 26:*i==0 27:items 28:*i==(char)92 29:i[1]=='r' 30:items hzChain::AddByte 31:i[1]=='n' 32:items hzChain::AddByte 33:i[1]=='t' 34:items hzChain::AddByte 35:i[1]=='"' 36:items hzChain::AddByte 37:hzChain::AddByte items 38:Return E_OK

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]== ''&quot;''){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]== ''&quot;''){i++;C.AddByte(CHAR_DQUOTE);continue; }
       }
       C.AddByte(*i) ;
       i++ ;
   }
   return E_OK ;
}