parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

"...с помощью хэша мы получаем УЖЕ отсортированную по годам..." - утверждение ложно (в применении к парсеру)

Misha v.3 15.08.2003 19:22 / 15.08.2003 19:28

покажите мне SQL который вернет нам хеш?
результаты sql запросов (когда достаем данные) - строкового или табличного вида.

это парсер сам делает из подобных табличных данных хеш.
кстати в данном случае если уж говорить о красоте представления данных, то лучше достать таблицу и сделать из нее хеш таблиц с помощью .hash[year][$.distinct[tables]]

тогда мы получим хеш, где ключи - года, а значения - таблицы с записями за данный год.

однако в этом случае действительно, неудобно получается то, что этот хеш несортирован. правда говорить тут о какой-то сортировке по умолчанию сложно: как добавлялись данные в хеш неизвестно (запросом получены), и один найдет задачу в которой потребуется сортировка по ключу, а другой - по значению (функции). однако мне видится, что реализовать это самому достаточно просто, и вносить это в парсер можно, но... не обязательно :)

пример (есссно можно усложнить и ввести возможности сортировки как вам угодно):
# пишем метод foreach, который даст нам требуемый функционал
@foreach[h;k;v;code][key]
$key[^h._keys[]]
^key.sort{$key.key}
^key.menu{
	$caller.$k[$key.key]
	$caller.$v[$h.[$key.key]]
	$code
}

@main[]
# собственно исходные данные - таблица
$t[^table::create{id	year	name
1	2000	мама0
2	2001	мама1
3	2000	папа0
4	2001	папа1
}]

# делаем хеш таблиц
$h[^t.hash[year][$.distinct[tables]]]

# зовем наш написаный оператор, который выведет нам наш хеш таблиц
^foreach[$h][k;v]{
	<b>$k</b><br />
	^v.menu{
		$v.year=$v.name
	}[<br />]
	<br /><br />
}
P.S. работает >= 3.0.8, иначе надо писать свой $h[^t.hash[year][$.distinct[tables]]], как писать - есть в примерах (lib.p)

P.P.S. про это есть пример в доке

P.P.P.S. написать необходимый оператор из ~7 строк, который потом можно юзать - по моему это не очень сложно...