CREATE TABLE my_pictures
(
title_crc CHAR(8, 0), // здесь будет значение типа 5F3B0C1A
title_full VARCHAR2, -- извините, диалект Oracle
file_path VARCHAR2
);
CREATE INDEX my_pictures_by_title_crc ON my_pictures (title_crc);
Как оптимальнее сделать поиск?
Предполагаю три варианта работы.
1. Сделать текстовый документ, в котором сопоставить каждому заголовку свой файл с иллюстрацией и потом обращаться к такому файлу и считывать построчно, пока текст в строке не будет похож (If Instr...) на название заголовка, вытащенного из документа. Тогда считать сл. строку, где сидит путь к картинке.
2. По названию заголовка искать в папке с картинками файл с похожим названием.
3. Прописать в самом коде соответствия названия заголовка и названий файла-иллюстрации. В данном варианте придется написать оч. много строк кода.
Вопрос, какой алгоритм будет (или может) работать быстрее?
Но зачем делать просто, если можно сложно?
Я бы сделал так:
Прикрутить к программе какую-нибудь встраиваемую СУБД типа SQLite или BerkeleyDB и создать там таблицу из трёх полей: заголовок, CRC32 заголовка и имя файла.
Код:
Код:
SELECT title_full, file_path FROM my_pictures WHERE title_crc = :crc_to_find
PS. Как только дописал, вспомнил, что пишу в арию "Visual Basic", а не "C++"... Зачем нам встраиваемая БД? У нас есть Jet и ADO!
PPS. Добавил пример. DLL и VB-шный пример собирается в висуальной студии 2008, надо только создать проект Win32 DLL и включить в него все *.cpp и *.h и VB-проект для файлов *.vb. К сожалению, в MS Jet aka Access нету типа данных Unsigned Int, поэтому для хранения crc32 применяется Double.
PPPS. Сырцы для CRC32 взял из Википедии.
Ещё одна вариация на тему.