Форум: "Начинающим";
Текущий архив: 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