int TStrUtil::SplitOnCh(TChA& ChA, TVec<char *>& WrdV, const char& Ch, const bool& SkipEmpty) { WrdV.Clr(false); WrdV.Add(ChA.CStr()); for (char *c = (char *) ChA.CStr(); *c; c++) { if (*c == Ch) { *c = 0; if (SkipEmpty && ! WrdV.Empty() && strlen(WrdV.Last()) == 0) { WrdV.DelLast(); } WrdV.Add(c+1); } } if (SkipEmpty && ! WrdV.Empty() && strlen(WrdV.Last()) == 0) { WrdV.DelLast(); } return WrdV.Len(); }
int TStrUtil::SplitWords(TChA& ChA, TVec<char *>& WrdV, const bool& SplitOnWs) { WrdV.Clr(false); WrdV.Add(ChA.CStr()); for (char *c = (char *) ChA.CStr(); *c; c++) { if ((SplitOnWs && *c == ' ') || (! SplitOnWs && ! TCh::IsAlNum(*c))) { *c = 0; if (! WrdV.Empty() && strlen(WrdV.Last()) == 0) { WrdV.DelLast(); } WrdV.Add(c+1); } } return WrdV.Len(); }
// Essesntially the same as TssParser::Next // For parallel load, FldV cannot be shared across many threads void TSsParserMP::NextFromIndex(uint64 Index, TVec<char*>& FieldsV) { // split on SplitCh FieldsV.Clr(); char* cur = FInPt->GetLine(Index); if (SkipLeadBlanks) { // skip leading blanks while (*cur && TCh::IsWs(*cur)) { cur++; } } char *last = cur; while (*cur != 0 && *cur != '\n') { if (SsFmt == ssfWhiteSep) { while (*cur && (*cur != '\n') && ! TCh::IsWs(*cur)) { cur++; } } else { while (*cur && *cur!=SplitCh && (*cur != '\n')) { cur++; } } if (*cur == 0) { break; } if (*cur == '\n') { break; } //*cur = 0; cur++; FieldsV.Add(last); last = cur; if (SkipEmptyFld && strlen(FieldsV.Last())==0) { FieldsV.DelLast(); } // skip empty fields } FieldsV.Add(last); // add last field }