Страница 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
" писал(а):а как быстрее в массив считать?
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;
" писал(а):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
" писал(а):Не совсем рулит, помедленнее немного
Согласен, считал данные ты быстрее, но их ведь после этого нужно будет построчно разобрать и наверно ещё кучу разных манипуляций произвести... а работа с сырым буфером это имхо, не очень легка задачка для человека который спрашивает как быстрее считать текстовый файл
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
Ну так как приходят - сразу засовывай