![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вопрос по текстовому файлу [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]строки у тебя фиксированной длины?
всё зависит от подхода то есть обязательно-ли физ-ое удаление строк