C++ (Qt)// заряжаем параметры разбораQString delims(" \t"); // 2 символа-разделителя (пробел и табуляция)QString tokens(",:"); // 2 символа-токена (запятая и двоеточие)CParseParam param(delims, tokens); // определяем что будет в качестве "цитат" (quote)param.AddQuote(100, "{", "}");param.AddQuote(100, "'");param.AddQuote(0, "\\\"");param.AddQuote(0, "\"");
C++ (Qt)QString str("1, { 2 }, 3");QStringRef ref;QStringParser parser(str, param);while (parser.NextToken(ref)) qDebug() << ref.toString();
C++ (Qt)if (param.RemoveQuote(ref)) { QStringRef ref2; QStringParser parser2(ref, param); while (parser2.NextToken(ref2)) ... }
C++ (Qt)QString src="1,2,3,{4,5,6},7,8,9";QRegExp rx("([^,]|\\{.*\\})"); for(int i = 0; i < 1000000; ++i) { int pos = 0; while((pos = src.indexOf(rx,pos))>=0) { pos+=rx.cap(0).length(); }}
C++ (Qt)QString temp, src="1,2,3,{4,5,6},7,8,9";CParseParam param;param.AddDelim(",");param.AddQuote(100, "{", "}"); for(int i = 0; i < 1000000; ++i) { QStringParser parser(src, param); while(parser.NextToken(temp)) {}}