--- parser3/operators.ru.txt 2021/01/13 23:10:52 1.254 +++ parser3/operators.ru.txt 2024/12/14 20:37:19 1.255 @@ -220,6 +220,7 @@ odbc c:\drives\y\parser3project\odbc\deb всегда есть кодировка UTF-8, она является кодировкой по-умолчанию для request и response ВНИМАНИЕ: имя кодировки case insensitive + синтаксис $имя[новое значение] $имя(математическое выражение нового значения) @@ -228,7 +229,7 @@ odbc c:\drives\y\parser3project\odbc\deb ^имя параметры вызов $имя.CLASS класс значения $имя.CLASS_NAME имя класса - $имя[$.key[] () {}] конструктор элемента переменной-хэша $имя.key + $имя[$.key[] () {}] конструктор элемента переменной-хеша $имя.key ^method[$.key[] () {}] конструктор элемента параметра-хеша $parameter.key $CLASS.имя обращение к переменной класса @@ -243,7 +244,7 @@ odbc c:\drives\y\parser3project\odbc\deb $переменная строка$переменная [код, вычисляющий строку] - например: $хэш[$.возраст(88)] $достать[$.поле[возраст]] ^хэш.[$достать.поле].format{%05d} + например: $хеш[$.возраст(88)] $достать[$.поле[возраст]] ^хеш.[$достать.поле].format{%05d} параметры := один или много параметров параметр := @@ -269,6 +270,7 @@ int,double ^int/double:sql{query}[[$.limit(2) $.offset(4) $.default{0} $.bind[см. table::sql]]] запрос, результат которого должен быть один столбец/одна строка + string в выражении def значение равно "не пуста?" @@ -360,6 +362,7 @@ string ^string:unescape[js|uri;escaped; $.charset[] ] декодирование переданного из js или uri + table в выражении логическое значение равно "не пуста?" @@ -438,19 +441,20 @@ hash ^хеш.intersects[b] = bool ^hash::sql{запрос}[[$.distinct(1) $.limit(2) $.offset(4) $.type[hash|string|table]]] получается hash(ключи=значения первая колонка ответа) of hash(ключи=названия остальных колонкок ответа) или - string=значение каждого элемента - строка, при надо указать ровно два столбца или + string=значение каждого элемента - строка, при этом надо указать ровно два столбца или table=значение каждого элемента - таблица ^хеш.keys[[название колонки с ключами]] + таблица из одного столбца key или как передадут ^хеш.count[] ^хеш.foreach[key;value]{тело}[[разделитель]|{разделитель который выполняется перед непустым очередным не первым телом}] ^хеш.delete[ключ] удалить ключ ^хеш.contain[ключ] - существует ли в хеше ключ (bool) - ^хэш.at[first|last][[key|value|hash]] - ^хэш.at([-]N)[[key|value|hash]] + ^хеш.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 $обратный_хеш[^хеш.reverse[]] - $отобранное[^хэш.select[key;value](выражение)[ $.limit(N) $.reverse(bool) $.default(bool) ]]] = хэш из ключей и значений, для которых условие истинно + $отобранное[^хеш.select[key;value](выражение)[ $.limit(N) $.reverse(bool) $.default(bool) ]] = хеш из ключей и значений, для которых условие истинно + hashfile ^hashfile::open[filename] @@ -479,6 +483,80 @@ hashfile $uid[$sessions.$sid] +array + в выражении + логическое значение равно "не пуст?" + числовое значение равно count[] + $массив.индекс, $массив.(выражение) + возврат значения по заданному индексу + $массив.индекс[значение], $массив.(выражение)[значение] + присваивание значения по индексу + $массив[значение;значение;...] + создание массива с заданными значениями + ^array::create[] + ^array::create[значение;значение;...] + создание массива с заданными значениями или пустого массива + ^array::copy[копируемый массив или хеш с цифровыми ключами] + копирование массива или хеша с цифровыми ключами + ^массив.add[добавляемый массив или хеш с цифровыми ключами] + добавление элементов из другого массива или хеша с перезаписью значений у совпадающих индексов + ^массив.join[добавляемый массив или произвольный хеш] + добавление элементов другого массива или хеша в конец массива + ^массив.append[значение;значение;...] + добавление элементов в конец массива + ^массив.insert(индекс)[значение;значение;...] + вставка элементов в указанную позицию массива + ^массив.left(n) + возвращает новый массив из n первых элементов массива + ^массив.right(n) + возвращает новый массив из n последних элементов массива + ^массив.mid(m;n) + возвращает новый массив, содержащий n инициализированных элементов массива, начиная с позиции m + ^массив.delete(index) + удаление элемента массива с оставлением пустого места + ^массив.remove(index) + удаление элемента со сдвигом последующих элементов на его место + ^массив.push[значение] + добавление элемента в конец массив + ^массив.pop[] + возвращает последний элемент и удаляет его из массива + ^массив.contain(индекс) + существует ли в массиве элемент по переданому индексу (bool) + ^array::sql{запрос}[[ $.sparse(false) $.distinct(false) $.limit(2) $.offset(4) $.type[hash|string|table]]] + создание массива на основе выборки из базы данных + $.sparse(false), по умолчанию - создать обычный массив. Значения строк выборки последовательно добавляются в массив + $.sparse(true) - создать разреженный массив. Первая колонка данных должна содержать индексы, + по которым будут размещены значения (аналогично ^hash::sql{}) + получается array of hash (ключи=названия остальных колонкок ответа) или + string=значение каждого элемента - строка, при этом надо указать ровно два столбца или + table=значение каждого элемента - таблица + ^массив.keys[[название колонки с ключами]] + таблица из одного столбца key или переданного названия с индексами инициализированных элементов массива + ^массив.count[] + количество инициализированных элементов массива + ^массив.count[all] + общее количество элементов массива, включая неинициализированные + ^массив.foreach[index;value]{тело}[[разделитель]|{разделитель который выполняется перед непустым очередным не первым телом}] + перебирает все инициализированные элементы массива + ^массив.for[index;value]{тело}[[разделитель]|{разделитель который выполняется перед непустым очередным не первым телом}] + перебирает все элементы массива + ^массив.at[first|last][[key|value|hash]] + ^массив.at([-]число)[[key|value|hash]] + доступ к элементу массива по порядковому номеру + ^массив.set[first|last][значение] + ^массив.set([-]число)[значение] + установка значения элемента массива по порядковому номеру + ^массив.compact[] + удаление неинициализированных элементов массива + ^массив.compact[undef] + удаление неинициализированных и пустых элементов массива + ^массив.sort[key;value]{{ключеделатель строка}|(ключеделатель число)}[[desc|asc]] default=asc + сортировка массива + $обратный_массив[^массив.reverse[]] + возвращает новый массив из элементов исходного в обратном порядке + $отобранное[^массив.select[key;value](выражение)[ $.limit(N) $.reverse(bool) ]] + отбор элементов массива, для которых условие истинно + form [берётся первый элемент из одноимённых из GET, потом первый из POST] $form:поле = string/file @@ -487,16 +565,14 @@ form $form:fields = hash со всеми полями формы $form:tables.поле = table с одним столбцом "field" со значениями "поля", для множественных значений $form:files.поле = hash со значениями полей типа файл, ключи - 0, 1, ..., значение - файл - $form:imap = хэш с ключами 'x' и 'y' + $form:imap = хеш с ключами 'x' и 'y' со значением ?1,2 приписки при использовании server-site image map - env $env:переменная - $env:fields хэш с переменными окружения + $env:fields хеш с переменными окружения $env:PARSER_VERSION версия парсера - cookie $cookie:имя считать старое или свежезаданное $cookie:имя[значение] на 90 дней @@ -505,7 +581,6 @@ cookie если дата, она будет преобразована к формату "Sun, 25-Aug-2002 12:03:45 GMT" $cookie:fields = hash со всеми cookies - request $request:query $request:uri @@ -520,7 +595,7 @@ request $request:body тело POST-запроса в виде текста $request:body-file тело POST-запроса в виде файла $request:body-charset кодировка POST-запроса - $request:headers хэш с заголовками запроса (без префикса HTTP_) + $request:headers хеш с заголовками запроса (без префикса HTTP_) response @@ -557,7 +632,7 @@ regex $шаблон.options строка с исходным текстом опций -TODO: reflection +reflection ^reflection:create[класс;конструктор[;пара;[мет[;ры]]]] вызывает указанный конструктор класса (не более 100 параметров) ^reflection:classes[] хеш со всеми классами. ключ -- имя класса, значение бывает methoded (класс с методами) или void ^reflection:class[объект] класс переданного объекта @@ -713,6 +788,7 @@ mail под win32 используется SMTP протокол, сервер задаётся $MAIL.SMTP[smtp.domain.ru] + image $картинка[^image::measure[DATA[; $.exif(bool) $.xmp(bool) $.xmp-charset[] $.video(bool) ]]] смотрит на .ext case insensitive, @@ -897,7 +973,7 @@ json $.array[method-junction] пользовательский метод, которому будут передаваться массивы $.taint[язык преобразования] задаёт язык преобразования для всех строк результата ]] - парсит json-строку в хэш + парсит json-строку в хеш ^json:string[system or user object[; $.skip-unknown(false) отключить exception и выдавать 'null' при сериализации объектов с типами @@ -1116,6 +1192,7 @@ xnode ^node.selectNumber[xpath/query/expression] = double if any or die ^node.selectString[xpath/query/expression] = string if any or die + memory ^memory:compact[] собрать мусор, освободив место под новые данные (предупреждение: память процесса никогда не освобождается)