Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2002.12.30;
Скачать: CL | DM;

Вниз

Правильный поиск   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.025 c
3-99035
Freeze
2002-12-11 08:43
2002.12.30
Как отловить изменение в DBGrid


1-99102
sbz
2002-12-20 07:06
2002.12.30
Как сделать такой интерфейс?


14-99272
Anatoly Podgoretsky
2002-12-07 15:01
2002.12.30
Именинники 7 декабря


6-99232
igorx
2002-11-05 10:54
2002.12.30
Контроль подключения к Интернет


14-99325
Peter Gluhiy
2002-12-10 13:07
2002.12.30
Проблема с AGP.