Russian Qt Forum

Qt => Общие вопросы => Тема начата: noname.pl от Февраль 09, 2007, 22:19



Название: читать поток до того как всетретится сочетание символов<a
Отправлено: noname.pl от Февраль 09, 2007, 22:19
привет всем. хочу читать поток QTextStream, ассоциированный с текстовым файлом до того, как встретится последовательность символов, например <123>. не нашел в доке (а скорее туплю). спасибо за помощь! ;)


Название: читать поток до того как всетретится сочетание символов<a
Отправлено: Racheengel от Февраль 10, 2007, 00:39
читаешь по байту и запоминаешь посл. считанные (n штук). Каждый раз проверяешь, если запомненные и тока что прочитанный байты равны этой последовательности, то усе. Иначе тока что прочитанный байт закидываешь в конец запомненных и читаешь далее.


Название: читать поток до того как всетретится сочетание символов<a
Отправлено: noname.pl от Февраль 10, 2007, 14:28
=) это понятно, но такой спасоб не очень красив. надеялся что мне подскажут, возможно, как это сделать через seek или что-то в этом роде. ... возможно будет удобнее сделать readAll в какой-то QString буфер и разбирать уже его.


Название: читать поток до того как всетретится сочетание символов<a
Отправлено: mega_m от Февраль 10, 2007, 16:20
Собственно если последовательность символов не сложная или (и) мала, то делать как сказал Racheengel, а так на основе конечного автомата.


Название: читать поток до того как всетретится сочетание символов<a
Отправлено: nova от Февраль 10, 2007, 19:27
А по моему, если данных не много, то проше читать фсе в буфер и разбирать его.


Название: читать поток до того как всетретится сочетание символов<a
Отправлено: noname.pl от Февраль 11, 2007, 04:49
Цитата: "mega_m"
Собственно если последовательность символов не сложная или (и) мала, то делать как сказал Racheengel, а так на основе конечного автомата.

можно пример?

2nova% данных несколько мегабайт текстовых файлов.


Название: читать поток до того как всетретится сочетание символов<a
Отправлено: nova от Февраль 11, 2007, 20:26
Посмотри реализацию QIODevice::readLineData в исходниках QT. там все просто :)
замени на свое условие выхода из цикла :)


Название: читать поток до того как всетретится сочетание символов<a
Отправлено: Racheengel от Февраль 13, 2007, 00:21
Тогда просто читаешь, пока не встретишь первый нужный символ. Если так - сравниваешь все следующие подряд с образцом. Но тебе все равно придется КАЖДЫЙ символ читать, при чем тут seek?


Название: читать поток до того как всетретится сочетание символов<a
Отправлено: noname.pl от Февраль 15, 2007, 03:27
2Racheengel% думал, может есть какой-то более "элегантный" способ (уже написаный метод), а так конечно чтение по байту. в qt ведь все нашару, почему бы не на столько =)


Название: читать поток до того как всетретится сочетание символов<a
Отправлено: Racheengel от Февраль 16, 2007, 00:48
та вроде нету...