Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.009 c
1-99188
Passlight
2002-12-18 11:01
2002.12.30
Многострочный TTreeView


4-99402
delphi5.01
2002-10-25 23:14
2002.12.30
RichEdit + Perenos Slova


7-99390
Alexxov
2002-10-25 13:41
2002.12.30
проблемы с LPT


7-99364
Anar
2002-10-23 12:19
2002.12.30
Windows


3-98996
Veronika
2002-12-10 12:10
2002.12.30
Подскажите методы настройки быстродействия FireBird





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский