Пытаюсь разобраться с программированием под Symbian.
Есть такая задачка. Нужно распарсить XML известной структуры и положить результаты в массив (набор строк различной длины). Как я понимаю, т.к. длина элементов может быть различной и не маленькой, нужно использовать дескрипторы HBufC. Что взять за массив? CDesCArray ? или просто MArray, CArray? Как правильно? Число элементов массива заранее не известно. Сортировки, поиски не нужны. Нужна последовательная запись и чтение.
Написал функцию читающую элементы из файла, но смущает то, что для возврата результата строки используется TBuf фиксированной длины. Стека может не хватить на самый длинный элемент (?) и перерасход памяти на коротких элементах. Хочется переделать на дескриптор динамической длины, но не знаю как
Функция:
Вызов:Code:TInt CMyReaderXML::ReadNext(TInt &iOffset, TDes &aBuf) { TPtr8 ptrBuf=iBuf->Des(); TInt iLengthCurrent = iOffset; TInt i = 1; aBuf = _L(""); while(1==1) { ReadFile(iOffset,ptrBuf,1); if(ptrBuf.Length()==0) return 1; if(i>1&&ptrBuf[0]=='<') break; aBuf.Append(ptrBuf[0]); iOffset++; if (ptrBuf[0]=='>') break; i++; }; return 0; }
Но aDoc остается пустой (count = 0).Code:aDoc =new (ELeave) CDesCArrayFlat(1024); ... TBuf<4096> strWord; do { res=ReadNext(aPos,strWord); if (strWord.Length()>0&¬ strWord[0]=='<') aDoc->AppendL(_L8(strWord)); } while(res==0); ...
Вообще хочется что-то похожее на работу со строками как в дельфи:
1) Строки динамические
2) Массив как TStringList
И еще вопрос для понимания: могу ли я хранить не сами строки в массиве, а указатели на дескрипторы? или так уже и работают какие-нибудь стандартные классы? В таком случае как будет выглядеть код добавления,удаления дескриптора в массив?
Спасибо.

Reply With Quote



