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

как быстрее всего считывать данные из файла

Добавлено: 26 мар 2007, 11:44
namomelkor
есть много текстовых файлов с данными
нужно как можно быстрее считать данные по строчно.
и еще нужно пропускать строки с первым символом # т.е надобы сначала считывать один символ а потом всю строку.

Re: как быстрее всего считывать данные из файла

Добавлено: 26 мар 2007, 11:53
somewhere
Считываешь каждый файл в массив. В массиве ищешь $0d0a - комбинация перевода строки и возврата каретки. Каждая строка завершается этой комбинацией. Потом разбиваешь на строки учитывая вышесказанное. При большом числе строк - порядка 1000 и более - скорость чтения строк может возрасти в десятки раз.

Re: как быстрее всего считывать данные из файла

Добавлено: 26 мар 2007, 13:36
namomelkor
а как быстрее в массив считать?

Re: как быстрее всего считывать данные из файла

Добавлено: 26 мар 2007, 13:57
SergeyS
TStringList рулит
TStringList.LoadFromFile... - загрузка файла
TStringList - доступ к строкам файла

Re: как быстрее всего считывать данные из файла

Добавлено: 26 мар 2007, 13:59
somewhere
&quot писал(а):а как быстрее в массив считать?
BlockRead(File,Buffer,Count,rCount) - считывает блок данных, размером Count записей в область данных Buffer из файла File. Фактически прочитанное число записей возвращается в rCount.

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

var
Buf : PByteArray;
F    : File;

Procedure ReadFile;
begin
AssignFile(F, 'D:\DDD.TXT');
Reset(F, 1); // Длина записи - 1 байт.
GetMem(Buf, 1048576); // выделить 1М для буффера
Blockread(F, Buf[0], 1048576);
CloseFile(F);
...
...
FreeMem(Buf);
end;
&quot писал(а):TStringList рулит
Не совсем рулит, помедленнее немного

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

procedure TStrings.LoadFromFile(const FileName: string);
var
  Stream: TStream;
begin
  Stream := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
  try
    LoadFromStream(Stream);
  finally
    Stream.Free;
  end;
end;

procedure TStrings.LoadFromStream(Stream: TStream);
var
  Size: Integer;
  S: string;
begin
  BeginUpdate;
  try
    Size := Stream.Size - Stream.Position;
    SetString(S, nil, Size);
    Stream.Read(Pointer(S)^, Size);
    SetTextStr(S);
  finally
    EndUpdate;
  end;
end;

Re: как быстрее всего считывать данные из файла

Добавлено: 27 мар 2007, 06:25
SergeyS
&quot писал(а):Не совсем рулит, помедленнее немного
Согласен, считал данные ты быстрее, но их ведь после этого нужно будет построчно разобрать и наверно ещё кучу разных манипуляций произвести... а работа с сырым буфером это имхо, не очень легка задачка для человека который спрашивает как быстрее считать текстовый файл

Re: как быстрее всего считывать данные из файла

Добавлено: 27 мар 2007, 16:24
namomelkor
Работать с сырым буфером для меня проше чем считать файл ))). Просто раньше никогда не задумывался над проблемой быстрого чтения из файла а довольно долгое время читал тупо из Memo1.

Re: как быстрее всего считывать данные из файла

Добавлено: 28 мар 2007, 12:17
Absurd
А зачем тебе куча текстовых файлов с данными? Засунь все данные в БД, а потом делай Sql запросы.

Re: как быстрее всего считывать данные из файла

Добавлено: 28 мар 2007, 18:07
namomelkor
данные динамические и приходять в файловом виде. Были бы статические давно бы засунул.

Re: как быстрее всего считывать данные из файла

Добавлено: 28 мар 2007, 18:30
Absurd
Ну так как приходят - сразу засовывай