Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.042 c
14-1108029447
Mac
2005-02-10 12:57
2005.02.27
Помогите, кто знает. Скопировать виртуальный образ проги.


14-1107509577
syte_ser78
2005-02-04 12:32
2005.02.27
ДСВ


14-1107950398
Cheater
2005-02-09 14:59
2005.02.27
Проблема с запуском DVD


6-1103612709
VAleksey
2004-12-21 10:05
2005.02.27
WinInet. Проблемы с HttpSendRequest.


14-1107722684
wl
2005-02-06 23:44
2005.02.27
Российская гуманитарная помощь





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский