Страница 1 из 1

Хочу написать програмку для удаления определенных строк в lo

Добавлено: 04 мар 2005, 23:09
ceval
Хочу написать програмку для удаления определенных строк в log-файле. Подскажите какие компоненты нужно использывать.

Добавлено: 09 мар 2005, 11:44
Romeo
А зачем пользоваться какии либо компонентами? Можно просто открыть файл, найти нужную строку и удалить. Всё делается с помощью Win32 API.

Добавлено: 09 мар 2005, 20:12
Naeel Maqsudov
Можно еще проще: никакого WinAPI.

Код: Выделить всё

var
  fi,fo:text;
  s:string;

begin
  assign(fi,"c:\111.log");
  reset(f);
  assign(fo,"c:\111.filtered.log");
  rewrite(f);
  while not eof(fi) do begin
    readln(fi,s);
    if not <s подлежит удалению> then writeln(fo,s);
  end;
  close(fi);
  close(fo);
end.
Правда, начиная с D5 идентификаторы assign и некоторые другие перекрыты в других стандартных модулях, подгружающихся позже, поэтому возможно прийдется везде писать system.assign, system.close и т.д.

Добавлено: 09 мар 2005, 20:51
YurikGL
Если события в логе разделены переносами строк, то проще всего делать
TStringList.loadFromFile
и работать с каждой записью отдельно
Там и удалять можно построчно.

Добавлено: 09 мар 2005, 21:38
Naeel Maqsudov
Плохой совет про TStringList!

Логи снимаемые в эксплуатационном режиме как правило имеют очень большой размер. Попробуйте загрузить так 100М.

TStringList грузит строки в память, а память отъедает из кучи.

Добавлено: 10 мар 2005, 22:03
YurikGL
>Naeel Maqsudov
>Куратор

Про большой размер - согласен...
Если скорость критична, то вроде потоки работают с файлами быстрее, чем assign...