void CSVString( const TStringVector &sv, TString &string, char adelimiter ) { TString word; int i; int n = sv.size(); int totallength = 0; // int pos = 0; char *pos; if( sv.size()==0 ) { string = "\"\""; return; } for( unsigned int i=0; i<n; i++ ) { word = CSVString( sv[i], adelimiter ); totallength += word.Length(); } if( n>0 ) totallength += n-1; string.SetLength( totallength ); pos = string.c_str(); for( unsigned int i=0; i<n; i++ ) { word = CSVString( sv[i], adelimiter ); strcpy( pos, word.c_str() ); pos += word.Length(); if( i<(n-1) ) { *pos = adelimiter; pos++; } } }
void DecodeCSVString( TStringVector &strings, const TString& astring, char adelimiter ) { TString str; str.SetLength( astring.Length() ); strings.clear(); if( astring.Length()==0 ) return; enum { normal, parenthesis } state; state = normal; const char *beg = astring.c_str(); const char *c = beg; char *destbeg = str.c_str(); char *dest = destbeg; while( *c ) { switch( state ) { case normal: switch( *c ) { case '"': state = parenthesis; c++; break; default: if( *c == adelimiter ) { strings.push_back( TString( destbeg, dest-destbeg ) ); dest = destbeg; } else { *dest = *c; dest++; } c++; } break; case parenthesis: if( *c == '"' ) { c++; state = normal; } else { *dest = *c; c++; dest++; } break; default: strings.clear(); /* TODO : Nen� upln� jasn�, zda v p��pad� failu smazat to, co se dosud ud�lalo... */ throw TException( "Unknown error in DecodeCSVString." ); } } strings.push_back( TString( destbeg, dest-destbeg ) ); unsigned int nstrings = strings.size(); unsigned int ui; for( ui=0; ui<nstrings; ui++ ) ReplaceHexFormWithOrdinals( strings[ui] ); }