|
|
|
Remiznik |
|
|||
Опытный Профиль Группа: Участник Сообщений: 379 Регистрация: 30.4.2005 Репутация: нет Всего: 1 |
Нужно открыть файл если он сушествуе прочитать последнюю строку и выташить из неё одно значени. Файл записываеться построчно. Не понима как прочитать именно последнюю строку ? Поискал в интенете там всё пишут что нужно последовательно перебирать весь файл но не понятно. А более удобного способа нет ?
|
|||
|
||||
borisbn |
|
||||
Эксперт Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
Это, пожалуй, самый удобный способ, но не быстрый. Возможно быстрее будет так (псевдокод)
смысл такой: сдигаешь указатель чтения по одному байту от конца файла, считываешь символ и добавляешь его в начало результирующей строки, пока не прочитаешь перевод строки... -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
||||
|
|||||
Remiznik |
|
|||
Опытный Профиль Группа: Участник Сообщений: 379 Регистрация: 30.4.2005 Репутация: нет Всего: 1 |
Ешо такой вопрос.
Я нашол нужную мне строку в файле. Файл записан по строчно и одно значение в найденой строке нужно заменить на другое. Что то типа replace в QString. |
|||
|
||||
borisbn |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
Если в последней строке, то можно эту строку считать, вернуться на её начало ( file.seek() ), "отрезать" файл на текущую позицию, заменить в строке то, что нужно, и добавить строку в конец файла
-------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
Remiznik |
|
|||
Опытный Профиль Группа: Участник Сообщений: 379 Регистрация: 30.4.2005 Репутация: нет Всего: 1 |
Например фай состоит из 100 строк определёной последовательности в 50 строке нужно заменить один символ. Предёться переписывать все 50 оставшихся строк ?
|
|||
|
||||
math64 |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
Именно так, если вставляемая строка длиннее или короче старой. Если новая строка той же длины, можно не перезаписывать, но только если запись не обрезает файл при использоваии низкоуровневых функций open(), read(), write(), close(), lseek() из <io.h> обрезки не происходит (там для обрезки нужно записать 0 байт), но код будет зависеть от компилятора и ОС. Код поиска последней строки, предложенный borisbn годится для кодировки latin1, win1251 (если исходники в этой кодировке), но его нужно модифицировать для utf8. Это сообщение отредактировал(а) math64 - 18.4.2011, 18:37 |
|||
|
||||
Sartorius |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 1568 Регистрация: 18.7.2006 Где: Ivory tower Репутация: нет Всего: 37 |
Remiznik, загружай файл целиком в память, думаю он у тебя << 1Гб
|
|||
|
||||
math64 |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 23 Всего: 72 |
A для больших файлов можно использовать маппинг - отображнение части файла в память.
|
|||
|
||||
Remiznik |
|
|||
Опытный Профиль Группа: Участник Сообщений: 379 Регистрация: 30.4.2005 Репутация: нет Всего: 1 |
но это только системными функциями можно сдалать ?
|
|||
|
||||
borisbn |
|
|||
Эксперт Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 48 Всего: 135 |
маппинг можно QFile::map() / QFile::unmap() -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
roatueque |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 8.2.2023 Репутация: нет Всего: нет |
Модератор: Сообщение скрыто. |
|||
|
||||
Lucilleemamb |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 19.2.2023 Репутация: нет Всего: нет |
Модератор: Сообщение скрыто. |
|||
|
||||
Lucilleemamb |
|
|||
Новичок Профиль Группа: Участник Сообщений: 3 Регистрация: 19.2.2023 Репутация: нет Всего: нет |
Модератор: Сообщение скрыто. |
|||
|
||||
Olpgom |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 15.2.2023 Репутация: нет Всего: нет |
Модератор: Сообщение скрыто. |
|||
|
||||
Olpgom |
|
|||
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 15.2.2023 Репутация: нет Всего: нет |
Модератор: Сообщение скрыто. |
|||
|
||||
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets" | |
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |