Главная страница
    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.57 MB
Время: 0.041 c
6-99236
Мазут Береговой
2002-11-01 07:16
2002.12.30
Помогите Мазуту!


7-99374
Delchiv
2002-10-25 22:30
2002.12.30
Эмуляция сигнала от клавиатуры через LPT


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


14-99285
Tusj
2002-12-09 13:58
2002.12.30
меня по аське зовут в Индию. Врет наверное?


14-99293
3D-Dragon
2002-12-09 15:04
2002.12.30
Работа для СПЕЦИАЛИСТА ! Срочно! Delphi_7 + 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
Английский Французский Немецкий Итальянский Португальский Русский Испанский