как быстрее всего считывать данные из файла
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
-
- Сообщения: 230
- Зарегистрирован: 31 авг 2006, 13:11
есть много текстовых файлов с данными
нужно как можно быстрее считать данные по строчно.
и еще нужно пропускать строки с первым символом # т.е надобы сначала считывать один символ а потом всю строку.
нужно как можно быстрее считать данные по строчно.
и еще нужно пропускать строки с первым символом # т.е надобы сначала считывать один символ а потом всю строку.
Считываешь каждый файл в массив. В массиве ищешь $0d0a - комбинация перевода строки и возврата каретки. Каждая строка завершается этой комбинацией. Потом разбиваешь на строки учитывая вышесказанное. При большом числе строк - порядка 1000 и более - скорость чтения строк может возрасти в десятки раз.
It's a long way to the top if you wanna rock'n'roll
-
- Сообщения: 230
- Зарегистрирован: 31 авг 2006, 13:11
а как быстрее в массив считать?
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;
It's a long way to the top if you wanna rock'n'roll
- SergeyS
- Сообщения: 196
- Зарегистрирован: 21 ноя 2006, 17:12
- Откуда: Хакасия, Абакан
- Контактная информация:
Согласен, считал данные ты быстрее, но их ведь после этого нужно будет построчно разобрать и наверно ещё кучу разных манипуляций произвести... а работа с сырым буфером это имхо, не очень легка задачка для человека который спрашивает как быстрее считать текстовый файл" писал(а):Не совсем рулит, помедленнее немного
-
- Сообщения: 230
- Зарегистрирован: 31 авг 2006, 13:11
Работать с сырым буфером для меня проше чем считать файл ))). Просто раньше никогда не задумывался над проблемой быстрого чтения из файла а довольно долгое время читал тупо из Memo1.
-
- Сообщения: 230
- Зарегистрирован: 31 авг 2006, 13:11
данные динамические и приходять в файловом виде. Были бы статические давно бы засунул.