Название: прочитать последние 4 строки из файлы Отправлено: gaara от Февраль 04, 2009, 16:35 Добрый день!
Подскажите, как можно прочитать последние 4 строки из файла? Читаю таким образом Код
можно конечно все прочитать в стринглист, а потом из него извлечь последние 4, но если файл очень большой, это ведь долго будет... Название: Re: прочитать последние 4 строки из файлы Отправлено: Rcus от Февраль 04, 2009, 16:47 Досчитай до 100!
1 2 3.. Быстрее! 98 99 100! /*собственно о чем это я*/ Что мешает читать файл кусками с конца и считать строки? :) Название: Re: прочитать последние 4 строки из файлы Отправлено: gaara от Февраль 04, 2009, 16:49 вот-вот.. я ж об этом.. просто не знаю как читать файл кусками с конца.. подскажите, если не сложно..
Название: Re: прочитать последние 4 строки из файлы Отправлено: gaara от Февраль 04, 2009, 16:52 уточню.. QT 3.3
Название: Re: прочитать последние 4 строки из файлы Отправлено: developer от Февраль 04, 2009, 17:08 класс QFile имеет функцию pos()
Цитировать qint64 QIODevice::pos () const [virtual] . Тоесть делаеш сначала pos(твоя позиция в файле), и потом начинаеш зчитывать до EOF(конец файла). Есть функция size ()- которая возвращает размер файла в байтах.For random-access devices, this function returns the position that data is written to or read from. For sequential devices or closed devices, where there is no concept of a "current position", 0 is returned. The current read/write position of the device is maintained internally by QIODevice, so reimplementing this function is not necessary. When subclassing QIODevice, use QIODevice::seek() to notify QIODevice about changes in the device position. Название: Re: прочитать последние 4 строки из файлы Отправлено: gaara от Февраль 04, 2009, 17:11 мммм.. вот к примеру файл текстовый, в нем строки разной длины, в одной 10 символов, в другой 100.. как мне прочитать последние 4 строки? от конца файла читать по одному символу назад и ждать, пока не насоберется 4 "\n"?
Название: Re: прочитать последние 4 строки из файлы Отправлено: developer от Февраль 04, 2009, 17:30 как один из вариантов
Название: Re: прочитать последние 4 строки из файлы Отправлено: gaara от Февраль 04, 2009, 17:36 а можете подсказать другие варианты? и с помощью каких классов можно так делать? не могу найти в QTextStream функцию для установки позиции в определенное место файла..
Название: Re: прочитать последние 4 строки из файлы Отправлено: developer от Февраль 04, 2009, 19:22 QTextStream также имеет функцию seek(), ее можно использовать, также QTextStream имеет функцию readLine(), алгоритм приблизительно такой
читаем файл с помощью функции readLine(), пока не встретится atEnd() (тоесть while not atEnd()), и запоминать только четире строки припустим в QStringList- readLine() возвращает строку, ее и можно запоминать, и когда проход окончится етот QStringList и возвращаем - но тут нужно придумать еще как в етот QStringLIst загнать только 4 строки, и постоянно их обновлять. Название: Re: прочитать последние 4 строки из файлы Отправлено: developer от Февраль 04, 2009, 19:25 Кстати тебе не нужно использовать QTextStream, QFile имеет ту же функциональность
Название: Re: прочитать последние 4 строки из файлы Отправлено: BRE от Февраль 05, 2009, 01:13 QTextStream также имеет функцию seek(), ее можно использовать, также QTextStream имеет функцию readLine(), алгоритм приблизительно такой За сообщение зачОт!читаем файл с помощью функции readLine(), пока не встретится atEnd() (тоесть while not atEnd()), и запоминать только четире строки припустим в QStringList- readLine() возвращает строку, ее и можно запоминать, и когда проход окончится етот QStringList и возвращаем - но тут нужно придумать еще как в етот QStringLIst загнать только 4 строки, и постоянно их обновлять. ;) Название: Re: прочитать последние 4 строки из файлы Отправлено: gaara от Февраль 05, 2009, 10:03 Цитировать читаем файл с помощью функции readLine(), пока не встретится atEnd() (тоесть while not atEnd()), и запоминать только четире строки мда :) допустим файлик текстовый весит 40-50 метров (к примеру, 150 000 строк)... сколько времени займет такой поиск последних четырех строк? Название: Re: прочитать последние 4 строки из файлы Отправлено: BRE от Февраль 05, 2009, 10:12 мда :) допустим файлик текстовый весит 40-50 метров (к примеру, 150 000 строк)... сколько времени займет такой поиск последних четырех строк? В первом приближении, я бы не заморачивался и читал файл с конца по-символьно. Все равно операционка будет его читать блоками и закеширует их у себя в буферах.Название: Re: прочитать последние 4 строки из файлы Отправлено: gaara от Февраль 05, 2009, 10:16 Цитировать В первом приближении, я бы не заморачивался и читал файл с конца по-символьно. я тоже так думаю.. а вот подскажите, точно ли есть seek() у QTextStream? я ищу в хелпе и никаких таких методов не вижу.. сорри за глупые вопросы, пишу на другом языке, просто вот понадобилось кое-что в программе, написанной на си с использованием qt переделать.. Название: Re: прочитать последние 4 строки из файлы Отправлено: BRE от Февраль 05, 2009, 10:19 Цитировать В первом приближении, я бы не заморачивался и читал файл с конца по-символьно. я тоже так думаю.. а вот подскажите, точно ли есть seek() у QTextStream? я ищу в хелпе и никаких таких методов не вижу.. сорри за глупые вопросы, пишу на другом языке, просто вот понадобилось кое-что в программе, написанной на си с использованием qt переделать.. bool QTextStream::seek ( qint64 pos ) Seeks to the position pos in the device. Returns true on success; otherwise returns false. Название: Re: прочитать последние 4 строки из файлы Отправлено: Rcus от Февраль 05, 2009, 10:20 ага, только в одной теме уже упоминали что позиция устанавливается смещением в байтах, поэтому для многобайтных кодировок нужно обрабатывать исключительные случаи.
Название: Re: прочитать последние 4 строки из файлы Отправлено: gaara от Февраль 05, 2009, 10:33 Код
пишет, Цитировать 'seek' : is not a member of 'QTextStream' или я неправильно пишу?Название: Re: прочитать последние 4 строки из файлы Отправлено: Rcus от Февраль 05, 2009, 10:51 Qt 3.3 doh
тогда ::device()->at(pos) Название: Re: прочитать последние 4 строки из файлы Отправлено: gaara от Февраль 05, 2009, 11:15 спасибо! :) то что надо... теперь моментом загружается... ))
|