Главная страница
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.013 c
7-99377
Геннадий
2002-10-08 21:26
2002.12.30
Как создать подобие TaskBar а? Что также крепился и исчезал.


1-99070
Darlock
2002-12-19 14:50
2002.12.30
Контролы с плоским интерфейсом


3-98973
FireWorks
2002-11-26 12:45
2002.12.30
MS SQL Server BLOB поля


1-99077
Юрий
2002-12-18 15:04
2002.12.30
Button1.Caption в две строки


1-99181
Explorer
2002-12-18 09:54
2002.12.30
Форма дла ввода пароля