Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.03.20;
Скачать: CL | DM;

Вниз

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

 
сергей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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.014 c
15-1291650651
stenfit
2010-12-06 18:50
2011.03.20
сохранение настроек


2-1293131507
nza
2010-12-23 22:11
2011.03.20
Как отлаживать компонент?


8-1208898067
Музыкант
2008-04-23 01:01
2011.03.20
Циклическое проигрывание midi-файла без разрывов в звучании


15-1291757399
Юрий
2010-12-08 00:29
2011.03.20
С днем рождения ! 8 декабря 2010 среда


2-1292935575
adigozelov
2010-12-21 15:46
2011.03.20
Treeview1.items.itemid