Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Вопрос по текстовому файлу [D7, WinXP]


Jilian ©   (2005-02-06 18:52:00) 

У меня возние вопрос по текстовому файлу (F:TextFile), его содержание:
строчка1
строчка2
строчка3
А мне нужно привести его к виду:
строчка1
строчка3
Иными словами, как удалить какую-то определенную строчку из текстового файла и сместить оставшиеся. Раньше эту проблему решала копированием информации, очисткой файла и т.д Подскажите, есть ли более рациональные способы???
Заранее благодарю всех откликнувшихся!


Anatoly Podgoretsky   (2005-02-11 00:27:00) [1]

List.Delete(List.Count-1)


iskatel   (2005-02-11 00:15:00) [2]

List.Delete(List.Count)


Jilian   (2005-02-11 00:06:00) [3]

Уважаемые мастера!!! А теперь такой вопрос, как удалить самую последнюю запись(элемент)??? Как удалить элемент с конца???


Jilian   (2005-02-07 22:37:00) [4]

Спасибо за полезные советы!!!


Kerk   (2005-02-07 06:46:00) [5]

Slym ©   (07.02.05 6:37) [8]
Лучше всего именно 2 файла. один читаем, другой пишем.


> + очень большой файл?

вот это будет архидолго


Slym   (2005-02-07 06:37:00) [6]

2 Defunct
>Рациональнее всего ... в оперативной памяти.
Оптимировать надо самое узкое место. А если узкое место малый размер оперативки + очень большой файл?
Лучше всего именно 2 файла. один читаем, другой пишем.


Defunct   (2005-02-07 02:55:00) [7]

Jilian ©   (06.02.05 22:35) [5]

Рациональнее всего производить удаление в оперативной памяти компьютера, потому что оперативная память на порядок быстрее диска на котором лежит файл. Поэтому ответ [2] можно считать наилучшим из возможных решений. Только алгоритм надо немного подправить:

1. При старте программы загрузить файл с StringList.
2. В процессе работы добавлять и удалять строки StringList'a.
3. На выходе из программы сохранить StringList в тот же файл.


default   (2005-02-06 22:50:00) [8]

Jilian ©   (06.02.05 22:35) [5]
можно не удалять строки
а помечать удалёнными
можно вести файл позиций и размеров строк
правда тут надо смотреть не накладней-ли этом в конечном итоге выйдет


Jilian   (2005-02-06 22:35:00) [9]

[4] Так в том-то и дело, что новый файл заводить, копировать, очищать... Это и ёжику понятно! А как сделать это более рационально?!
> Какой размер файла и надо удалять по номеру или по содержимому

Размер файла тут не имеет значение, а удаляется так: анализируется информация, и решается, удалять ли элемент из файла.
[2] Это тоже понятно, а попрощеничего нет???


begin...end   (2005-02-06 21:50:00) [10]

> Jilian ©   (06.02.05 18:52)

> Раньше эту проблему решала копированием информации, очисткой
> файла и т.д Подскажите, есть ли более рациональные способы???

Ещё можно завести новый файл, и, читая старый, одновременно писать или не писать очередную строку в новый. Для текстовых файлов (если работать с ними именно как с текстовыми файлами TextFile) других способов нет. Это осложняется ещё и тем, что текстовые файлы являются файлами последовательного доступа.

С типизированными файлами будет немного проще, но они подойдут только для "коротких" строк.

А для небольших текстовых файлов вполне подойдёт [2].


Anatoly Podgoretsky   (2005-02-06 19:37:00) [11]

Какой размер файла и надо удалять по номеру или по содержимому.


PZ   (2005-02-06 19:06:00) [12]

Var
 List : tStringList;
begin
 List := tStringList.Create;
 List.LoadFromFile('Text.txt');
 List.Delete(1);       // Удаляем строчку строчка2
 List.SaveToFile('Text.txt');
 List.Free;
end;


default   (2005-02-06 18:56:00) [13]

строки у тебя фиксированной длины?
всё зависит от подхода то есть обязательно-ли физ-ое удаление строк


Наверх

Титульная страница Поиск, карта сайта Написать письмо