Russian Qt Forum
Ноябрь 25, 2024, 13:49 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Чтение файла задом наперёд  (Прочитано 6641 раз)
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?
« Последнее редактирование: Март 05, 2009, 17:28 от fulkabaster » Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Март 05, 2009, 17:43 »

а уже обсуждалось, название темы не помню, что-то вроде "Чтение файла с конца", поищи.
Записан

Юра.
fulkabaster
Гость
« Ответ #2 : Март 06, 2009, 17:00 »

Не нашел  Обеспокоенный Искал по разным критериям, по всем разделам.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Март 06, 2009, 17:11 »

нашел, но оказывается там про Qt3:
http://www.prog.org.ru/topic_8493_0.html
Записан

Юра.
Rcus
Гость
« Ответ #4 : Март 06, 2009, 17:40 »

Из поста получается что файл представлен в кодировке ucs2 (utf16 без суррогатных пар). Почему бы тогда не использовать in.seek( in.pos() - 2 * N), а затем считывать методом QString read ( qint64 maxlen ). А затем развернуть результат.
Записан
fulkabaster
Гость
« Ответ #5 : Март 06, 2009, 19:13 »

В файле - текстовые символы. И считывать нужно именно посимвольно, т.к. символы запихиваютс в дек (deque из STL). Причем если чтение идет вперед, то запихиваются с одного конца (push_back(char) ), если назад - с другого конца (push_front(char) ). Поэтому и интересует, есть ли метод прямого считывания в обратном порядке. С QString получтся еще дольше.
(Кстати, почему в контейнерах QT не предусмотрен аналог deque? Вектора и списки есть, а вот деков нет).
Записан
BRE
Гость
« Ответ #6 : Март 06, 2009, 19:21 »

(Кстати, почему в контейнерах QT не предусмотрен аналог deque? Вектора и списки есть, а вот деков нет).
В QList также можно вставлять в начало и конец списка:
void QList::push_front ( const T & value )
void QList::push_back ( const T & value )

+ QLinkedList.
« Последнее редактирование: Март 06, 2009, 19:25 от BRE » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.09 секунд. Запросов: 22.