Название: Как удалить произвольную строку из текстового файла ? Отправлено: agent007 от Май 29, 2009, 21:12 В общем вопрос встал об удалении строки под указанным номером из текстового файла, который содержит список строк произвольной длинны. Подскажите в какую сторону копать?
Название: Re: Как удалить произвольную строку из текстового файла ? Отправлено: agent007 от Май 29, 2009, 23:53 Решение которое использую я таково
Код
этот код очень тормозной на больших файлах, как мне кажется, подскажите пожалуйста код, чтобы работал быстро на больших файлах. (для моей программки такой код работает нормально, но всегда хочется большего ;) ) Название: Re: Как удалить произвольную строку из текстового файла ? Отправлено: Valeriy от Май 30, 2009, 00:51 Оптимальный вариант - fseek к логину и перезапись его пробелами. :) Конечно, если программа при чтении этого файла может обрабатывать пустые строки. Ну и конечно, если добавление и удаление пользователей будут происходить постоянно, то это плохой вариант - будет много пустых строк.
Название: Re: Как удалить произвольную строку из текстового файла ? Отправлено: agent007 от Май 30, 2009, 10:59 Fseek это ведь из Windows, под UNIX оно скомпелируется и будет работать?
Название: Re: Как удалить произвольную строку из текстового файла ? Отправлено: spectre71 от Май 30, 2009, 11:23 В общем случае открыть файл на чтение-запись. Читать файл от начала и разбирать пока не найдешь начало и конец нужной строки. Далее переписывать хвост. Проще работать с 2 файлами - из одного читаем, в другой пишем - первый удаляем второй переименовываем.
Если требуется оптимизация - описывай подробно задачу! Название: Re: Как удалить произвольную строку из текстового файла ? Отправлено: agent007 от Май 30, 2009, 13:46 Если требуется оптимизация - описывай подробно задачу! - а я её и описал, но если надо по-пунктам, то вот:1. имеется файл, который содержит к примеру 200'000 строк 2. строки имеют различную длинну 3. конец строки "\n", к примеру Сам вопрос - как из такого файла удалить строку под номером 128'174 ? Если использовать два файла, то на файлах в 50 мегабайт нужно ждать долго. Код тоже желательно приложить, а то на словах всё легко. Название: Re: Как удалить произвольную строку из текстового файла ? Отправлено: Valeriy от Май 30, 2009, 15:12 1. Делаем все строки для удобства длинной 30 символов.
2. Читаем по 30 символов из файла и ищем строчку с логином. 3. Когда найдём, при помощи seek откатываемся на 30 символов назад и пишем 30 пробелов. 4. Делаем flush. При фиксированной длине строки и известном номере строки можно сразу сделать seek. Про fseek я заговорил, т.к. привык к Си, это из стандартной библиотеке и есть везде, где есть компилятор Си. :) А вообще, решая такие задачи люди придумали базы данных. :)) Можно, например, воспользоваться SQLite, благо она маленькая и хорошо работает с Qt. Название: Re: Как удалить произвольную строку из текстового файла ? Отправлено: spectre71 от Май 30, 2009, 18:16 Если требуется оптимизация - описывай подробно задачу! - а я её и описал, но если надо по-пунктам, то вот:1. имеется файл, который содержит к примеру 200'000 строк 2. строки имеют различную длинну 3. конец строки "\n", к примеру Сам вопрос - как из такого файла удалить строку под номером 128'174 ? Если использовать два файла, то на файлах в 50 мегабайт нужно ждать долго. Код тоже желательно приложить, а то на словах всё легко. Если надо удалить строку физически, то других вариантов как перезаписать хвост файла или весь файл - НЕТ! Но могут быть другие подходы для решения проблемы. То что ты написал этого не достаточно, описывай задачу подробно. Например: - как часто удаляются строки - какая типичная и максимальная длина строки - какие еще операции производятся (чтение/вставка/добавление в конец) и над чем - каков источник данных(файла) - нафига это нужно - ... Может тебе действительно проще всасать данные из файла в SQL базу и работать с ними. В твоем кратком описании интересны только первые два пункта. |