Форум: "Основная";
Текущий архив: 2002.12.30;
Скачать: [xml.tar.bz2];
ВнизПравильный поиск Найти похожие ветки
← →
OxOTHuK (2002-12-18 11:45) [0]Есть текстовый файл размером 14МВ и в 50 тыс. строк - тефонная база. Как мне грамотнее организовать поиск по каждой n-ной строке (телефон, адрес....). Пробовал readln, но медленно...
как быть??
← →
Илайдж (2002-12-18 11:46) [1]Перегнать все один раз в .db, .dbf или еще куда и не мучаться...
← →
DenK_vrtz (2002-12-18 12:13) [2]Ага, и таблицу проиндексировать!!! Будет просто летать!!! :-)
← →
MMF (2002-12-18 13:53) [3]Если нет возможности перевести из текстового файла в базу данных какого-либо формата, а необходимо использовать файл в таком виде как он есть, то используй отображение файла в память и работай с его проекцией. В этом случае однозначно ты получишь выигрыш по сравнению с Readln.
← →
OxOTHuK (2002-12-18 14:13) [4]2MMF: проекция в память! это как?
← →
Smithson (2002-12-18 14:52) [5]Еще могу предложить перл (не бейте меня!). Со строками он работает
сильно быстрее, чем Delphi.
← →
MBo (2002-12-18 14:55) [6]Если нет желания работать с базами данных (где все это реализовано весьма эффективно), надо загрузить в память файл полностью (14 мег -не так уж и много), например, в StringList и имкать в нем.
проекция в память - см. CreateFileMapping, MapViewOfFile
← →
still (2002-12-18 15:01) [7]можно создать индексный файл без БД.
Ну то есть пишешь туда ключевое поле и смещение (например, номер телефона и номер строки).
Т.е. если ты даже, например, в StringList это всосешь, то не надо будет по нему лазить каждый раз.
← →
MMF (2002-12-18 16:42) [8]На тебе слегка покоцаный для сокращения размера примерчик:
Procedure TAddinObject.GetUsersList(VL: OLEVariant);
var FFileHandle: THandle;
FMapHandle: THandle;
UsrSize: integer;
UsrData: PByte;
P_UsrData: PChar;
Begin
CheckFirstCall();
FFileHandle:=FileOpen(UsrName, fmOpenRead or fmShareDenyNone);
if FFileHandle=INVALID_HANDLE_VALUE then Exit;
UsrSize:= GetFileSize(FFileHandle, nil);
FMapHandle:= CreateFileMapping(FFileHandle, nil, PAGE_READONLY, 0, UsrSize, nil);
if FMapHandle=0 then
begin
CloseHandle(FFileHandle);
Exit;
end;
CloseHandle(FFileHandle);
UsrData:=MapViewOfFile(FMapHandle, FILE_MAP_READ, 0, 0, UsrSize);
if usrData = nil then
begin
CloseHandle(FMapHandle);
Exit;
end;
P_UsrData:=Pchar(Usrdata);
//чего-нибудь делай
UnmapViewOfFile(UsrData);
end;
← →
Indivigione (2002-12-19 05:45) [9]А я просто LAMER:))))))
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.12.30;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.02 c