Название: Чтение файла задом наперёд Отправлено: fulkabaster от Март 05, 2009, 17:26 Открывается QFile, с ним связывается поток QTextStream, чтение происходит посимвольно ( >> QChar ). Иногда нужно остановить обычное чтение и считать N символов назад, в обратном порядке. Я бы реализовал это примерно так:
QChar sym; QTextStream in; ... in.seek( in.pos() +1 ); for (int i=0; i<N; i++) { in.seek( in.pos() -2 ); in >> sym; } но может быть существует прямой метод "обратного считывания", без постоянного скакания с помощью seek? Название: Re: Чтение файла задом наперёд Отправлено: lit-uriy от Март 05, 2009, 17:43 а уже обсуждалось, название темы не помню, что-то вроде "Чтение файла с конца", поищи.
Название: Re: Чтение файла задом наперёд Отправлено: fulkabaster от Март 06, 2009, 17:00 Не нашел :-[ Искал по разным критериям, по всем разделам.
Название: Re: Чтение файла задом наперёд Отправлено: lit-uriy от Март 06, 2009, 17:11 нашел, но оказывается там про Qt3:
http://www.prog.org.ru/topic_8493_0.html Название: Re: Чтение файла задом наперёд Отправлено: Rcus от Март 06, 2009, 17:40 Из поста получается что файл представлен в кодировке ucs2 (utf16 без суррогатных пар). Почему бы тогда не использовать in.seek( in.pos() - 2 * N), а затем считывать методом QString read ( qint64 maxlen ). А затем развернуть результат.
Название: Re: Чтение файла задом наперёд Отправлено: fulkabaster от Март 06, 2009, 19:13 В файле - текстовые символы. И считывать нужно именно посимвольно, т.к. символы запихиваютс в дек (deque из STL). Причем если чтение идет вперед, то запихиваются с одного конца (push_back(char) ), если назад - с другого конца (push_front(char) ). Поэтому и интересует, есть ли метод прямого считывания в обратном порядке. С QString получтся еще дольше.
(Кстати, почему в контейнерах QT не предусмотрен аналог deque? Вектора и списки есть, а вот деков нет). Название: Re: Чтение файла задом наперёд Отправлено: BRE от Март 06, 2009, 19:21 (Кстати, почему в контейнерах QT не предусмотрен аналог deque? Вектора и списки есть, а вот деков нет). В QList также можно вставлять в начало и конец списка:void QList::push_front ( const T & value ) void QList::push_back ( const T & value ) + QLinkedList. |