Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.08.17;
Скачать: [xml.tar.bz2];

Вниз

Простейший вопрос по текстовым файлам   Найти похожие ветки 

 
Gringoire   (2008-07-10 03:56) [0]

Господа, подскажите, как прочесть строку из текстового файла в переменную (здесь ReadLn вполне подходит, на это можно не отвечать), и, после прочтения этой строки удалить ее из файла?

пример:
*Файл содержит
слудующие
стоки*

После прочтения строки, переменной присваивается значение "Файл содержит", а в файле остается:

*слудующие
стоки*

Заранее спасибо.


 
brother ©   (2008-07-10 05:07) [1]

> после прочтения этой строки удалить ее из файла?

не лучше перезаписать без этой строки...
1. считываем все строки
2. 1 строку в переменную
3. перезаписываем файл без 1 строки...
зы надеюсь файло не большое


 
Gringoire   (2008-07-10 05:30) [2]

Ну, так по идее, так и получается (возможно, изначально не точно объяснил). Файл действительно не очень большой (до 1.5 Мб).

Весь вопрос в том, что я не знаю, как эту строку (первую) убрать (((


 
brother ©   (2008-07-10 05:34) [3]

считываешь построчно в tstrings
удаляешь из tstrings.delete(0) как то так... делфи под рукой нет( посмотри справку по нему...


 
Рамиль ©   (2008-07-10 08:55) [4]

В файле нельзя удалить произвольные байты, можно только обрезать с конца.

То бишь два варианта:
1. Загрузить все в память, сохранить в файл нужное.
2. Переписать в другой файл нужное, стереть старый, переименовать новый.


 
brother ©   (2008-07-10 09:30) [5]

> 2. Переписать в другой файл нужное, стереть старый, переименовать
> новый.

паранойя?) а вообще да)


 
Riply ©   (2008-07-10 09:38) [6]

> [4] Рамиль ©   (10.07.08 08:55)
> В файле нельзя удалить произвольные байты, можно только обрезать с конца.

> То бишь два варианта:
> 1. Загрузить все в память, сохранить в файл нужное.
> 2. Переписать в другой файл нужное, стереть старый, переименовать новый.

Пусть надо удалить с FromPos до ToPos
Открываем файл. Устанавливаем поинтер на ToPos и читаем хвостик.
Устанавливаем поинтер на FromPos и записываем "хвостик".
Корректируем размер.


 
User   (2008-07-10 09:39) [7]


var
 t: TStringList;
begin
 t:= TStringList.Create;        // создаем -
 t.LoadFromFile("test.txt");
 t.Delete(0);
 t.SaveToFile("test.txt");
 t.Free

... единственное, что нужно - файл должен быть текстовый (с концами строк), и нужно ввести проверку количества строк ...


 
tesseract ©   (2008-07-10 09:40) [8]


> Устанавливаем поинтер на FromPos и записываем "хвостик".
>
> Корректируем размер.


Если файл небольшой, проще и быстрее будет через память, и полностью файл сбрасывать на диск.


 
Рамиль ©   (2008-07-10 09:43) [9]


> Устанавливаем поинтер на ToPos и читаем хвостик.

Куда читаем, в память? А если большой, то все равно писать конец в другой файл. С полным переписыванием надежнее ;)

Вообщем надо по ситуации смотреть. Но в общем случае читать хвостик быстрее, конечно.


 
Правильный^Вася   (2008-07-10 09:43) [10]

TStringList.LoadFromFile
TStringList.Delete(0)
TStringList.SaveToFile


 
Правильный^Вася   (2008-07-10 09:44) [11]


> User   (10.07.08 09:39) [7]

try-finally забыл


 
palva ©   (2008-07-10 10:00) [12]

Если постоянно нужно какие-то строки удалять из файла или вставлять в него, то лучше использовать не файлы, а какую-нибудь простенькую СУБД.


 
Dennis I. Komarov ©   (2008-07-10 11:01) [13]

Вобщем ИМХО надо пересмотреть с самого начала задачу. Файл (текстовый) тут не слишком подходит.


 
brother ©   (2008-07-10 12:34) [14]

похоже на логи, которые просматриваются и потом удаляются... но такой подход - бред


 
Gringoire   (2008-07-10 20:43) [15]

Спасибо, ребят. Разобрался. Всего вышенаписанного мне вполне хватило. Прогу реализовал.

Всем спасибо. Всем хорошего настроения и продуктивного дня.


 
brother ©   (2008-07-11 05:31) [16]

> [15] Gringoire   (10.07.08 20:43)

зы адресс почты прикольный ;))))



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2008.08.17;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.05 c
11-1192764911
Vinum
2007-10-19 07:35
2008.08.17
StGrdD6 не работает редактирование ячейки


15-1214489008
ekto
2008-06-26 18:03
2008.08.17
Как по ip вычислить нахала?


15-1213899510
Юрий Зотов
2008-06-19 22:18
2008.08.17
Конвертер Delphi -> Java


15-1214991525
Дебил какой-то
2008-07-02 13:38
2008.08.17
Где же винда хранит пароли от интернета ?


4-1194334678
Mamed
2007-11-06 10:37
2008.08.17
Lan Card Disable





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский