Форум: "Основная";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];
ВнизВопрос по текстовому файлу Найти похожие ветки
← →
Jilian © (2005-02-06 18:52) [0]У меня возние вопрос по текстовому файлу (F:TextFile), его содержание:
строчка1
строчка2
строчка3
А мне нужно привести его к виду:
строчка1
строчка3
Иными словами, как удалить какую-то определенную строчку из текстового файла и сместить оставшиеся. Раньше эту проблему решала копированием информации, очисткой файла и т.д Подскажите, есть ли более рациональные способы???
Заранее благодарю всех откликнувшихся!
← →
default © (2005-02-06 18:56) [1]строки у тебя фиксированной длины?
всё зависит от подхода то есть обязательно-ли физ-ое удаление строк
← →
PZ (2005-02-06 19:06) [2]Var
List : tStringList;
begin
List := tStringList.Create;
List.LoadFromFile("Text.txt");
List.Delete(1); // Удаляем строчку строчка2
List.SaveToFile("Text.txt");
List.Free;
end;
← →
Anatoly Podgoretsky © (2005-02-06 19:37) [3]Какой размер файла и надо удалять по номеру или по содержимому.
← →
begin...end © (2005-02-06 21:50) [4]> Jilian © (06.02.05 18:52)
> Раньше эту проблему решала копированием информации, очисткой
> файла и т.д Подскажите, есть ли более рациональные способы???
Ещё можно завести новый файл, и, читая старый, одновременно писать или не писать очередную строку в новый. Для текстовых файлов (если работать с ними именно как с текстовыми файлами TextFile) других способов нет. Это осложняется ещё и тем, что текстовые файлы являются файлами последовательного доступа.
С типизированными файлами будет немного проще, но они подойдут только для "коротких" строк.
А для небольших текстовых файлов вполне подойдёт [2].
← →
Jilian © (2005-02-06 22:35) [5][4] Так в том-то и дело, что новый файл заводить, копировать, очищать... Это и ёжику понятно! А как сделать это более рационально?!
> Какой размер файла и надо удалять по номеру или по содержимому
Размер файла тут не имеет значение, а удаляется так: анализируется информация, и решается, удалять ли элемент из файла.
[2] Это тоже понятно, а попроще ничего нет???
← →
default © (2005-02-06 22:50) [6]Jilian © (06.02.05 22:35) [5]
можно не удалять строки
а помечать удалёнными
можно вести файл позиций и размеров строк
правда тут надо смотреть не накладней-ли этом в конечном итоге выйдет
← →
Defunct © (2005-02-07 02:55) [7]Jilian © (06.02.05 22:35) [5]
Рациональнее всего производить удаление в оперативной памяти компьютера, потому что оперативная память на порядок быстрее диска на котором лежит файл. Поэтому ответ [2] можно считать наилучшим из возможных решений. Только алгоритм надо немного подправить:
1. При старте программы загрузить файл с StringList.
2. В процессе работы добавлять и удалять строки StringList"a.
3. На выходе из программы сохранить StringList в тот же файл.
← →
Slym © (2005-02-07 06:37) [8]2 Defunct
>Рациональнее всего ... в оперативной памяти.
Оптимировать надо самое узкое место. А если узкое место малый размер оперативки + очень большой файл?
Лучше всего именно 2 файла. один читаем, другой пишем.
← →
Kerk © (2005-02-07 06:46) [9]Slym © (07.02.05 6:37) [8]
Лучше всего именно 2 файла. один читаем, другой пишем.
> + очень большой файл?
вот это будет архидолго
← →
Jilian © (2005-02-07 22:37) [10]Спасибо за полезные советы!!!
← →
Jilian © (2005-02-11 00:06) [11]Уважаемые мастера!!! А теперь такой вопрос, как удалить самую последнюю запись(элемент)??? Как удалить элемент с конца???
← →
iskatel © (2005-02-11 00:15) [12]List.Delete(List.Count)
← →
Anatoly Podgoretsky © (2005-02-11 00:27) [13]List.Delete(List.Count-1)
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2005.02.27;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.036 c