Archive | Алгоритмы

Delphi.DBTreeView. Алгоритм динамического обновления узлов

Пусть есть TreeView, связанное с базой данных, например MySQL. Необходимо сделать так, чтобы данные загружались только при первоначальном заполнении (idParent=-1) либо при раскрытии узла (OnExpanding). Данный алгоритм хорош тем, что не грузит сразу все данные. И если, скажем, дерево большое, содержит много узлов, загрузка которых может занять некоторое время, то он будет очень эффективен в данном случае. Итак, человеческими словами Алгоритм -собрать ID и имена всех детей для определенного родителя -очистить узел от указателей и […]

Delphi. DBTreeView. Самый эффективный алгоритм удаления узлов из дерева, связанного с базой данных

-пусть есть TreeView, соединенный с базой, скажем MySQL -пусть мы хотим удалить выделенный узел TreeView из базы данных и из дерева Алгоритм (пока что №1 в моем рейтинге) -собрать ID всех детей (рекурсивно), хранящиеся по указателю каждого узла дерева SomeNode.Data -удалить все записи с этими ID из БД -удалить указатели всех детей в TreeView обычным обходом всех детей через repeat until -удалить всех детей из дерева -удалить указатель удаляемого узла -удалить сам узел Вот пример […]

Delphi. Алгоритмы. Галерея своими руками или как выложить плитками фрэйм

Давно хотел записать это, так как часто пригождается, думаю транслировать на другие языки не составит труда. Итак, вот что у нас получится… Я пока не стал выкладывать никакие картинки, просто хочу здесь описать саму логику алгоритма. Сам алгоритм я взял в книге Дмитрия Осипова по FireMonkey и немного адаптировал под свою задачу. Итак, пусть есть N картинок заданного размера. Я создал отдельный объект фиксированного размера TPictureFrame и им выложил галерею так, чтобы если плитка не […]

Delphi. Алгоритмы. Создание уникального имени через добавление номера в конце в скобках. Например SomeFile(1), SomeFile(2) и др.

Итак, пусть у нас в некоторой директории находится файл SomeFile, сделаем так, чтобы при добавлении следующего файла с именем SomeFile, в директории оказался файл SomeFile(1), SomeFile(2), SomeFile(3). При отсутствии этого файла в директорию копируется просто файл. Данная задача возникла в результате разработки решения для передачи файлов по HTTP протоколу. Нужно было сделать так, чтобы при каждой передаче файл в обязательном порядке копировался и сохранялся под новым именем в любом случае, даже если он там уже […]

Delphi. Как отсортировать TStringList и сохранить соответствие с несколькими другими TStringList?

Данный пост является развитием предыдущего. Будем сортировать один TStringList -другие же приводить в соответствие с переставленными элементами.

Исходные данные у меня точно такие же. Не буду переписывать часть поста сюда.Изменился только алгоритм сортировки, так как теперь в соответствие нужно привести не один, а несколько списков.

Delphi. Сортировка TStringList с приведением в соответствие другого TStringList

Что делаем? Есть у нас некоторый TStringList, скажем SLToSort:TStringlist. Нужно его отсортировать – задача элементарная, пишем компараторы для наших данных, включаем CustomSort и всё готово. А что делать, если кроме SLToSort есть просто SomeSL:TStringlist и после сортировки SLToSort – нужно привести его элементы в соответствие с SLToSort, ну то есть так….

Где это может понадобиться? Случай редкий, но всё же. Я делаю небольшой FTP клиент, который собирает данные о файлах на сервере. В принципе – вся информация […]

Delphi. Делаем простой инкрементальный поиск

Пусть на ListView выведены данные. Сделаем простой инкрементальный поиск… Данные будем брать из ListView. Алгоритм поиска самый простой – перебор, при желании и обилия большого числа данных его легко можно заменить, скажем на бинарный поиск. Сначала результаты поиска сохраним в отдельном списке, и далее будем проматывать по мере нажатия кнопки далее, показывая результаты. 

Delphi. Алгоритмы. Как заменить имя файла на уникальное ?

Скажем, у нас есть имя файла в формате Filename.jpg в переменной FileName. Далее код на уровне идеи… Вариант 1 через GUID

Вот пример такого изменения. Сохраняем часть старого имени для читабельности и добавляем GUID

Вариант 2 через Random Отделим имя от расширения, в предпоследнем элементе массива заменим имя на уникальное через Random

Алгоритм хорош, но есть вероятность совпадения имен. Как выход, можно гонять этот метод рекурсивно до исчезновения совпадений. Файлы будут вида […]

Алгоритмы. Вход в личный кабинет. Поправки

Век живи, век учись! И самое главное, когда чувствуешь, что что-то не так, не нужно себя обманывать, чем быстрее осознаешь проблему, тем быстрее её решишь. В одном из предыдущих постов, я написал простой алгоритм входа в личный кабинет, но всегда есть, что усовершенствовать. Оно вроде бы всё работало, но вот с точки зрения логики и памяти были нюансы. В данном посте, на принципиальном уровне хочу закрепить как в Delphi организовать вход в личный кабинет. По […]

Delphi. Алгоритм входа в личный кабинет

Во многих программах используются роли и личные кабинеты для них. Эта задача, столь популярная и типовая, что многие программисты делают её на лету. В целях закрепления навыков решил написать небольшую статью на эту тему. Сам алгоритм я сформулировал для себя так …Проверки… 1.Искать введенный логин в БД, если не нашли, то выйти из алгоритма 2. Сопоставить пару логин-пароль, если пара совпадает, то следующее действие, иначе выход 3. Какое-то действие, например открытие окна, страницы, поздравление со […]

« Older posts