|
Главная |
Разделы |
Поиск |
Группы |
Чат |
Видеоальбомы |
Фотоальбомы |
Блоги |
Помощь
|
|
Просмотр темы |
Главная -->
Компьютеры -->
Интернет -->
Программирование -->
perl -->
|
|
Следующий контент »
|
На уровень выше
|
Посмотреть подразделы
|
|
|
 Дата: 1261210825
 Новое: 1266735957
|
|
Посмотреть комментарии этой темы
|
|
|
|
сравнение сложных структур данных в Perl
|
|
| Задача стояла следующая, необходимо написать универсальную блоговую модель, на
основе которой можно хранить любые данные любой сложности. Особенность таких
данных в том, что есть корневые элементы данных, от которых отраставют любые
структуры. Впринципе придумать что-то другое сложно, да и к тому же меня эта
модель вполне устраивает.
Сам алгоритм работы уже был построен так что в модуле (написанном на Perl)
существовало 2 функции получить данные, и записать данные.
Вот тут я и задумался, что этими функциями я не отделаюсь, во первых нужна
возможность удаления, изменения записей и наконец основой основ должен быть
ПОИСК.
Когда я писал ret WebOS data.pm (http://jkeks.far.ru/ret) я подошел к этому
грубо говоря НИКАК.
Во первых записи читались только по одной Когневые элементы предсталяли из
себя простые хэши с некоторыми зависимости, чем-то напоминающими XML.
Это оказалось очень неудобно. Новый код по запросу может возвращать массив
данных, грубо гвооря сложный массив.
Что я подразумеваю под словом сложный.
Если вы сталкивались с Perl , то наверняка знаете внутренее устройство сложных
структур. Мягко говоря - она до ужаса мне нравится. Все построено на ссылках.
Двухмерный массив мы получим когда каждому элементу массива мы ассоциируем
ссылку на отедльный массив. Таким образом мы легко можем создавать Х-мерные
массивы. кроме того какие-то элементы могу ссылаться на простые строки
(скаляры) данных, а некоторые на хэши.
В популярной книге Кристиансена Perl CookBook описаны лишь базовые возможности
ссылок. Например Хэши массивов или массивы хэшей. Нас же интересуют ЛЮБЫЕ. А
точнее массив чего-то!
например Массив хэшей массивов скаляров.
Стрктуру определяет программист. Интерфейс для работы с данными предоставляет
сам Perl (немного сложный, однако вполне претенддующий на роль УНИВЕРСАЛЬНОГО)
Итак.. ПОИСК.
О условиях.
Имеется грубо говоря 2 массива А и Б. А - это пользовательский шаблон по
которому мы ищем данные. Б - это одна из записей из базы данных.
Обе они представляют из себя сложные массивы. Массивы будут совпадать, при
условии что все элементы массива А будут в точности совпадать с
соответствующими элементами массива Б.
т.е. у нас не полное сравнение, а лишь до первого несовпадения.
На базе этого можно будет строить поиск с использованием реулярных выражений,
и с использованием логических опреаций.
Но мы будем мучаться над самым простым.
Я 3 дня не мог приехать к решению, а может и больше уже наверно.. пока не
пошел в бблиотеку и не посидел там рядом с девченками 8)
И вот что получилось:
Алгоритм представляет из себя 4 блока, 3 из них почти одинаковые и работают с
разными типами данных SCALAR HASH ARRAY. четвертый выполняет повторяющиеся
функции.
Рассмотрим самый простой блок обработки скаляров:
Блок этот выполнен в виде функции _Scalar
В его задачи входит проверка на соответствие однородность типов скаляров.
Далье Если скаляр является ссылкой , тогда в массив накопления ссылок из
соответствующих элементов массивов кладутся значения.
Иначе проверяются сами данные на совпадение.
Последний абзац вы наверняка не поняли. Поэтосму расскажу лучше в общих чертах.
Перебор сложного массива превращается в перебор кучи простых массивов. Для
каждой следующей структуры (массива, хэша или скаляра) создается 2 записи в
массиве ссылок. (первая запись - это ссылка в шаблонном массиве, а вторая - это
ссылка в массиве базы данных) Каждая простая структура проверяется полностью.
Только после завершения проверки структуры программа смотрит в массив ссылок.
Есть ли там данные. Если они там есть, то достаются ссылки, разыменовываются и
наконец мы получаем следующую простую структуру. В которой так же могут быть
ссылки, которые так же попадут в тот же самый массив ссылок, если не произойдет
несовпадения данных.
Это очень нересурсоемкий алгоритм, потому что каждая ссылка на новую простую
структуру делает копию только простой структуры.
Ну и теперь хочу привести простой пример отходя от которого можно развить идею,
В начале определимся, что в массиве
a@ находится оригинальный массив с шаблоном от пользователя.
@b очередная запись считанная из базы
@a_ - рабочий простой массив, получаемый после опреации:
@a_=@a; (понятно что копируется в него не все, а только начальный массив, без
данных от ссылок.
@b_ - аналогично!
Ну вот..
а по принципу функции _Array() надо написать функцию _Hash и _Scalar.
Вот и вся сложность сравнения стрктур данных любой сложности.
А на этом я все..
Чтоб у вас не было таких проблемм.
Ну и сами вы сможете оценить полноценный код (который однозначно скоро появится
на http://jkeks.far.ru/ret , ну и хуже того на базе этого будет работать проект
http://revda.biz
Так что заходите в гости.
http://www.opennet.ru/base/dev/perl_datatype.txt.html |
|
|
|
|
|
|
|
|
|
| Фотоальбомы:
|
|
>>> посмотреть остальные фотоальбомы
|
|
|
|
|
|
| Видеоальбомы:
|
|
>>> посмотреть остальные видеоальбомы
|
|
|
|
Комментарии |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
BETA testing, Lite version, MVC Catalyst, Perl, Open source (email: q7u5@ukr.net)
|
|
English version (in development, detail of email: q7u5@ukr.net)
|
|
Если вы нашли ошибку, сообщите пожалуйста на email: q7u5@ukr.net (не забудьте отправить текст ошибку которая будет на экране или опишите ее)
|
|
Copyright 2008 www.x0.org.ua . All rights reserved
|
|
видео сервис, видео просмотр, видео с мобильного, скрипт перекодирование видео, сервис, перекодирование видео, mp3 музыка, социальная сеть, социальные сети, разработка социальных сетей, крупные порталы, большие порталы, высоконагруженный портал
видео сайт, фотоальбом фотоальбомы, фотогрфия фотогрфии, фото графии, фото альбомы, фото видео, разработки perl разработчики perl разработанные perl разрабатывать perl разработки perl разрабатывание разрабатываю разработчики разработанные
модули модели контроллеры представление разработка сайтов, разработка движка CMS фремворки, фреймфорки фрейворк, форемфорк движки
конвертирвоание видео, чат чаты социальная сеть социальной сети социальные сеть разработка социальной сети разработка социальная сеть разрабатывание социальной сеть
социальная сеть клубы большие порталы, разработчики разработки моделирование заказы магазин поиск работы
музыка компонены веб разработка высокопроизводительный мультимедиа видео трансляция поисковая транслирование
видео сервисы видео портал порталы архив файл обмен статьи блогеры програмирование программисты программировать
фремворки фремворка фремворк
web основы javascript jquery markitup java script mod_perl fastcgi apache22 mysql украина украинский русский россия
библиотека видео сай трансляция транслирование seek read write open close
все о программирвоании супер программное обеспчение обезпчение обеспечение
кеширование кеширование memchahe запросы
новые возможности
catalyst perl
video service, video viewing, video from mobile, video transcoding script, service, transcoding video, mp3 music, social networking, social networks, the development of social networks, large portals, large portals, heavy-Portal
video site, photo albums, More Photos More Photos, photo graphy, photo albums, photo video, development perl perl developer perl designed to develop perl development perl razrabatyvanie developers develop applications designed
modules model controllers submission web development, development engine CMS The framework, freymforki freyvork, foremfork Engines
konvertirvoanie video, chat chat social network social networking social network development of social network development razrabatyvanie social network social networking
social network of clubs big portals, developers design modeling jobs store job search
music component web development high-performance multimedia video transyaltsiya Search
Video Services Video Portal Portal Archive file sharing article bloggers programmers programming programming
The framework The framework The framework
web framework javascript jquery markitup java script mod_perl fastcgi apache22 mysql Ukraine Ukrainian Russian Russia
Library video broadcast broadcast sai seek read write open close
all about super programmirvoanii software obespchenie software
caching caching memchahe requests
закачивание закачка скачивание просмотр видео фото музыка mp3
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
|