--- parser3/operators.txt 2017/02/08 19:55:46 1.250 +++ parser3/operators.txt 2017/02/15 23:45:14 1.251 @@ -244,7 +244,7 @@ odbc c:\drives\y\parser3project\odbc\deb например: $хэш[$.возраст(88)] $достать[$.поле[возраст]] ^хэш.[$достать.поле].format{%05d} параметры := один или много параметров -параметр:= +параметр := (математическое выражение) вычисляется много раз внутри вызова, | [код] вычисляется один раз перед вызовом, | {код} вычисляется 0 или много раз внутри вызова, @@ -358,91 +358,93 @@ string ^string:unescape[js|uri;escaped; $.charset[] ] декодирование переданного из js или uri -!table - в выражении +table + в выражении логическое значение равно "не пуста?" числовое значение равно count[] - !^table::create[[nameless]]{данные}[[$.separator[^#09]]] старое имя "set" - !^table::create[table][[$.limit(1) $.offset(5) $.offset[cur] $.reverse(1)]] - клонирует таблицу - reverse << сзаду на перёд (работает пока только в locate, в table::create НЕ работает) - !^table::load[[nameless;]путь[;опции]] - !если не nameless, названия колонок берутся из первой строки - !пустые строки, и строки в первой колонке содержащие '#', игнорируются - !$.separator[^#09] - !$.encloser["] по-умолчанию, нет. - !^table::sql{query}[[$.limit(2) $.offset(4) $.bind[hash] todo:$.default{ ^table::create[...] }]] + ^table::create[[nameless]]{данные}[[$.separator[^#09] $.encloser[]]] + ^table::create[table][[$.limit(1) $.offset(5) $.offset[cur] $.reverse(1)]] + клонирует таблицу + reverse - в обратном порядке + ^table::load[[nameless;]путь[;опции]] + если не nameless, названия колонок берутся из первой строки + пустые строки, и строки в первой колонке содержащие '#', игнорируются + $.separator[^#09] + $.encloser["] по-умолчанию, нет. + ^table::sql{query}[[$.limit(2) $.offset(4) $.bind[hash]]] bind привязывает переменные в запросе к их значениям пока реализован только для oracle в запросе надо написать ":имя" - в параметре bind передать hash, из которого возьмётся(или куда запишется) значение - !^таблица.save[[nameless|append;]путь[;опции, см. load]] - !$таблица.поле - !$таблица.поле[новое значение] - !$таблица.fields из named таблицы выдаёт текущую запись как Hash - !^таблица.menu{тело}[[разделитель]] - !^таблица.offset[] печатает offset - !^таблица.offset[[whence]](5) сдвигает - !whence=cur|set - !без whence - это cur - !^таблица.count[], ^таблица.count[rows] - количество строк в таблице - !^таблица.count[columns] - количество столбцов таблицы - !^таблица.count[cells] - количество ячеек в текущей строке таблицы - !^таблица.line[] 1-based offset - !^таблица.sort{{ключеделатель строка}|(ключеделатель число)}[{desc|asc}] default=asc - !^таблица.append{данные} - !^таблица.append[ $.имя столбца[значение столбца] ] - !^таблица.insert{данные} добавить запись на текущую позицию - !^таблица.insert[ $.имя столбца[значение столбца] ] - !^таблица.delete[] - стирает запись с текущей позиции - !^таблица.join[таблица][$.limit(1) $.offset(5) $.offset[cur]] - добавляет записи из таблицы. + в параметре bind передать hash, из которого возьмётся (или куда запишется) значение + ^таблица.save[[nameless|append;]путь[;опции, см. load]] + $таблица.поле + $таблица.поле[новое значение] + $таблица.fields из named таблицы выдаёт текущую запись как Hash + ^таблица.menu{тело}[[разделитель]] + ^таблица.foreach[позиция;значение]{тело}[[разделитель]] + ^таблица.line[] 1-based offset + ^таблица.offset[] печатает offset + ^таблица.offset[[whence]](5) сдвигает + whence=cur|set, без whence - это cur + ^таблица.count[], ^таблица.count[rows] - количество строк в таблице + ^таблица.count[columns] - количество столбцов таблицы + ^таблица.count[cells] - количество ячеек в текущей строке таблицы + ^таблица.sort{{ключеделатель строка}|(ключеделатель число)}[{desc|asc}] default=asc + ^таблица.append{данные} + ^таблица.append[ $.имя столбца[значение столбца] ] + ^таблица.insert{данные} добавить запись на текущую позицию + ^таблица.insert[ $.имя столбца[значение столбца] ] + ^таблица.delete[] - стирает запись с текущей позиции + ^таблица.join[таблица][$.limit(1) $.offset(5) $.offset[cur]] - добавляет записи из таблицы. таблицы должны иметь одинаковую структуру. - !^таблица.flip[] выдаёт транспонированную, надо куда-то сложить, потом пользовать - !^таблица.locate[поле;значение][[$.limit(1) $.offset(5) $.offset[cur] $.reverse(1)]] + ^таблица.flip[] выдаёт транспонированную, надо куда-то сложить, потом пользовать + ^таблица.locate[поле;значение][[$.limit(1) $.offset(5) $.offset[cur] $.reverse(1)]] передвигает текущую строку, если найдёт. выдаёт bool - !^таблица.locate(логическое выражение)[[$.limit(1) $.offset(5) $.offset[cur] $.reverse(1)]] + ^таблица.locate(логическое выражение)[[$.limit(1) $.offset(5) $.offset[cur] $.reverse(1)]] передвигает текущую строку, если найдёт. выдаёт bool - !^таблица.hash{[поле]|{код}|(выражение)}[[поле значений|table поля значений]][[$.distinct(1) $.distinct[tables]]] - значением $hash.ключ будет hash в котором поля значений будут ключами + ^таблица.hash{[поле]|{код}|(выражение)}[[поле значений|table поля значений]{код значения}][[$.distinct(1) $.distinct[tables] $.type[hash]]] + по умолчанию значением $hash.ключ будет hash в котором поля значений будут ключами поля значений могут быть не указаны, тогда ими будут все столбцы, включая ключевой если distinct содержит true, то не будет ошибки при повторяющихся ключах если distinct содержит tables, то будет создан hash из таблиц, содержащих строки с ключом - !^таблица.columns[[название столбца]]+ таблица из одного столбца 'column' или как передадут - !$отобранное[^таблица.select(выражение)] = таблица из тех же столбцов и строк, у которых условие совпало + $.type[string/table] поменять значение элемента на строку (указать одну колонку) или таблицу + ^таблица.columns[[название столбца]] + таблица из одного столбца 'column' или как передадут + $отобранное[^таблица.select(выражение)] = таблица из тех же столбцов и строк, у которых условие совпало $adults[^man.select($man.age>=18)] ^таблица.color[цвет1;цвет2] -!hash - !в выражении - !логическое значение равно "не пуста?" - !числовое значение равно _count[] - !$хеш.ключ - !_default - специальный ключ, если задан, - то при обращении по ключу, которому нет соответствия, выдаётся _default значение - !$хеш.fields выдает $hash. чтобы класс hash был чуть больше похож на класс table - !^hash::create[[!copy_from_hash|copy_from_hashfile]] +hash + в выражении + логическое значение равно "не пуст?", хеш с _default уже не пуст + числовое значение равно count[] + $хеш.ключ + !_default - специальный ключ, если задан, + то при обращении по ключу, которому нет соответствия, выдаётся _default значение + $хеш.fields выдает $hash. чтобы класс hash был чуть больше похож на класс table + ^hash::create[[|copy_from_hash|copy_from_hashfile]] создаёт новый hash, копию старого - !^хеш.add[слагаемое] + ^хеш.add[слагаемое] перезаписывает одноимённые - !^хеш.sub[вычитаемое] - !^хеш.union[b] = объединение + ^хеш.sub[вычитаемое] + ^хеш.union[b] = объединение одноимённые остаются - !^хеш.intersection[b] = пересечение + ^хеш.intersection[b] = пересечение значения хеш - !^хеш.intersects[b] = bool - !^hash::sql{запрос}[[$.distinct(1) $.limit(2) $.offset(4) todo:$.default{$.field[]...}]] - получается hash(ключи=значения первая колонка ответа) - of hash(ключи=названия остальных колонкок ответа) - !^хеш.keys[[название колонки с ключами]]+ таблица из одного столбца key или как передадут - !^хеш.count[] - !^хеш.foreach[key;value]{тело}[[разделитель]|{разделитель который выполняется перед непустым очередным не первым телом}] - !^хеш.delete[ключ] удалить ключ - !^хеш.contain[ключ] - существует ли в хеше ключ (bool) - !^хэш.at[first|last][[key|value|hash]] - !^хэш.at([-]N)[[key|value|hash]] + ^хеш.intersects[b] = bool + ^hash::sql{запрос}[[$.distinct(1) $.limit(2) $.offset(4) $.type[hash|string|table]]] + получается hash(ключи=значения первая колонка ответа) of hash(ключи=названия остальных колонкок ответа) или + string=значение каждого элемента - строка, при надо указать ровно два столбца или + table=значение каждого элемента - таблица + ^хеш.keys[[название колонки с ключами]] + таблица из одного столбца key или как передадут + ^хеш.count[] + ^хеш.foreach[key;value]{тело}[[разделитель]|{разделитель который выполняется перед непустым очередным не первым телом}] + ^хеш.delete[ключ] удалить ключ + ^хеш.contain[ключ] - существует ли в хеше ключ (bool) + ^хэш.at[first|last][[key|value|hash]] + ^хэш.at([-]N)[[key|value|hash]] доступ к заданным элементам упорядоченного хеша - !^хэш.sort[key;value]{{ключеделатель строка}|(ключеделатель число)}[[desc|asc]] default=asc + ^хэш.sort[key;value]{{ключеделатель строка}|(ключеделатель число)}[[desc|asc]] default=asc !hashfile !^hashfile::open[filename]