Главная страница
    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.036 c
1-1108463529
Nekromant
2005-02-15 13:32
2005.02.27
переименовываю файл .....


1-1107960532
arhis
2005-02-09 17:48
2005.02.27
Форма в форме.


14-1107851510
uw
2005-02-08 11:31
2005.02.27
Eclipse не запускается


4-1105013665
ScrewDriver
2005-01-06 15:14
2005.02.27
Проблема выгрузки DLL


1-1108158244
Porecla
2005-02-12 00:44
2005.02.27
Ещё вопросик, Как перетащить ярлык в ListBox





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