Главная | Разделы | Поиск | Группы | Чат | Видеоальбомы | Фотоальбомы | Блоги | Помощь


Здравствуйте, гость. Пожалуйста войдите или Зарегистрируйтесь (забыл пароль)
Логин:
Пароль:

Пользователей: 25
Новичок:
BUM
Сейчас на сайте: 6
Сообщений: 20
Тем: 18
Разделов: 41
Статистика

Новые темы:
PerlQT4 (Использование.. С++ классов в Perl скриптах)..
catalyst не видит путь
Остальные

Новые разделы:
staynet.ru
MVC Catalyst
Остальные

Новые сообщений:
PerlQT4 (Использование.. С++ классов в Perl скриптах)..
PerlQT4 (Использование.. С++ классов в Perl скриптах)..
Остальные

Рейтинг контента:
CRUD Perl Web
сравнение.. сложных структур данных в Perl
Остальные

Новые фотографии:
Рейтинг фотографий

Новые видео клипы:
Рейтинг видео клипов





Просмотр темы

Главная --> Компьютеры --> Интернет --> Программирование --> perl -->
       Следующий контент »
На уровень выше Посмотреть подразделы


Тема: сравнение сложных структур данных в Perl        (Просмотров: 3388)
Автор: test01
Дата: 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_ - аналогично! Code: sub _Array { for ($i=0;$i<#$;$i++) { if (ref($b[i]) ne ref($a_[i])) {} # не совпадает структура if (ref($a_[i]) {push (@link, $a_[i]); push (@link, $b_[i])} else { if ($a_[i] ne $b_[i]) # не совпадают элементы массива {} } } _All(); } sub _All { if ( #$link > 0 ) { $b = pop @link; $a = pop @link; if (ref($a) ne ref($b) {} # не совпадает структура опять. Одно из правил о # несовпадении структуры лишее. if (ref($a) eq 'SCALAR') {$a_=$$a; $b_=$$b; _Scalar()} if (ref($a) eq 'ARRAY') {@a_=$@a; @b_=$@b; _Array()} if (ref($a) eq 'HASH') {%a_=$%a; %b_=$%b; _Hash()} } else {} # данные совпали!!! } Ну вот.. а по принципу функции _Array() надо написать функцию _Hash и _Scalar. Вот и вся сложность сравнения стрктур данных любой сложности. А на этом я все.. Чтоб у вас не было таких проблемм. Ну и сами вы сможете оценить полноценный код (который однозначно скоро появится на http://jkeks.far.ru/ret , ну и хуже того на базе этого будет работать проект http://revda.biz Так что заходите в гости. http://www.opennet.ru/base/dev/perl_datatype.txt.html





Проголосовавшых: 2        Балов: 10        Среднее: 5        Популярность: 3       
Чтобы проголосовать вы должны зарегистрироватся !




Фотоальбомы:       

test01
Фотографии НАСА (NASA) космос, планеты и другие

test01
[Эротика] Monica Mattos разные подборки

test01
Художественные, филосовские картинки/фотографии

test01
Школьницы Киева выпуск 2009-2010
>>> посмотреть остальные фотоальбомы





Видеоальбомы:       

test01
Boxxy

test01
Теотиуакан (аст. науатль, исп. Teotihuacán)

test01
Sexylette красивая девушка

test01
Impaled Nazarene
>>> посмотреть остальные видеоальбомы



Комментарии



Гостям, запрещено создавать комментарии! Можете зарегистрироватся ...



HTML/CSS/JS has been tested in a browser Firefox2-3, secondary - IE.
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