Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2011.03.20;
Скачать: [xml.tar.bz2];

Вниз

Удаление записей из файла   Найти похожие ветки 

 
сергей2010   (2010-12-27 14:32) [0]

Добрый день. Имеется текстовой файл заполненный записями вида :

---Запись1---
..текст..
..текст..
..текст..
---Запись1: конец---
---Запись2---
..текст..
..текст..
..текст..
---Запись2: конец---
и.т.д.

Записи не имеют последовательности. То есть, может идти сначала "запись1" а за ней "запись 23".
Файл постоянно дописывается методом:

var
 F : TextFile;
begin
AssignFile(F,"file.txt");
Append(f);
writeln(f, text);
CloseFile(F);
end;

Так вот, подскажите пожалуйста, как можно удалить(перезаписать) какую-либо запись в файле, не загружая его в память (файл - лог, и может быть объемом до 1 гига)? Или подскажите метод удаления (или лучше замены) записи.
Я пользовался вот таким методом но это довольно долго... Может подскажете что получше... :

var
 BaseItem, s: string;
 F,f2 : textfile;
 get:bool;
begin
s := pchar("--"+cap+"--");
get := false;

AssignFile(F, file);
AssignFile(F2, file2);
reset(f);
Rewrite(f2);
try
 while not Eof(F) do
  begin
   Readln(F, LogStr);
   If s = LogStr then get := true;
   if get = false then writeln(f2, LogStr);
   if BaseItem = "--| "+cap+" - END |--" then get := false;
  end;
finally
 CloseFile(F);
 DeleteFile(file);
end;

writeln(f2, "--"+Cap+"--");
writeln(f2, NewText);
writeln(f2, "--| "+Cap+" - END |--");
CloseFile(F2);

RenameFile(file2, file);
end;


 
clickmaker ©   (2010-12-27 14:40) [1]

> как можно удалить(перезаписать) какую-либо запись в файле,
> не загружая его в память

не загружать совсем не получится. Но можно этот процесс оптимизировать. см. Memory-mapped files в MSDN


 
clickmaker ©   (2010-12-27 14:42) [2]

впрочем, записи можно не удалять, а помечать как удаленные. Тогда достаточно SetFilePointer / WriteFile


 
Ega23 ©   (2010-12-27 14:51) [3]

1. Если это действительно лог, то удалять из него ничего нельзя. Он не для этого предназначен.
2. Изменить формат хранилища. Например - XML. Или СУБД простую взять


 
Anatoly Podgoretsky ©   (2010-12-27 14:59) [4]

> сергей2010  (27.12.2010 14:32:00)  [0]

Современные процессоры пока не умеют работать не загружая в память, все
опереции делаются только с память физической или регистровой.



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2011.03.20;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.005 c
1-1249315691
sunnmas
2009-08-03 20:08
2011.03.20
узнать о завершении потока


15-1290230521
RGV
2010-11-20 08:22
2011.03.20
Всем! Кто не равнодушен к сокращению часовых поясов


15-1291618037
TUser
2010-12-06 09:47
2011.03.20
1994 - год открытия численного интегрирования


2-1293376363
Godod
2010-12-26 18:12
2011.03.20
Чертеж графика по точке на видео


15-1291269391
oxffff
2010-12-02 08:56
2011.03.20
Буржуи воруют наши идеи.





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