Редактор макета сетки

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

В редакторе можно создавать собственные макеты сетки, более подходящие для управления метаданными документов, чем имеющиеся 4 шаблона. Иногда, использование разных макетов расширяет возможности для маскировки одинаковых или разных тем и метаданных для сетки презентации более подходящей для типа анализа выполняемого в данный момент времени.

Выбрать макет можно в меню Правка подменю элемента Макет сетки или в селекторе макетов сетки.

При создании нового макета сетки, важно дать ему значимое имя в поле Имя макета сетки, чтобы потом можно было легко найти его в селекторе макета.

Группа основных опций внизу используется для определения:

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

Скрипт, который будет создан и протестирован в редакторе моих скриптов, должен иметь примерно такую основную структуру JScript:

var changed = false;
for (var i = 0; i < pdfe.SelectedFiles.Count; i++) {
    var FileMetadata = pdfe.SelectedFiles(i).Metadata;

    //заменить дефисы с пробелами в поле Название    
    var s = FileMetadata.Title.replace(/-/g, ' ');
    if (s != FileMetadata.Title) {
        FileMetadata.Title = s;
        changed = true;
    }

    //верхний регистр в поле Тема
    s = FileMetadata.Subject.toUpperCase();
    if (s != FileMetadata.Subject) {
        FileMetadata.Subject = s;
        changed = true;
    }

    //Установить год в названии заданного поля 
    s = new Date().getFullYear();
    if (s != FileMetadata.Year) {
        FileMetadata.Year = s;
        changed = true;
    }
    if (changed) {
        FileMetadata.CommitChanges();
    }
}

Скрипт получит в pdfe.SelectedFiles файл-объект PDF-файла, редактируемого в инструменте Правка информации и его новые, ещё не сохранённые метаданные. В качестве примера, скрипт можно проверить/изменить и если вызывается метод CommitChanges, то эти изменения будут включены в сохранённые метаданные.

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

Вкладка Колонки используется для определения:

Динамические вычисляемые колонки

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

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

Эти выражения Eval не ограничиваются числовыми значениями. Возможна также манипуляция с текстом, поэтому они могут быть использованы, чтобы найти, извлечь, манипулировать и показать текст собранный из данных других колонок.

Выражения Eval для этих примеров и полный синтаксис выражений Eval показаны и объяснены ниже.

Панель расчёта

Панель расчёта определяется на вкладке Вычисления редактора макета сетки. Это ещё один тип динамического вычисления для определения макета сетки.

Панель доступна кнопкой панели инструментов сетки, которая видна, если эта панель настроена в активном макете сетки.

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

Чтобы определить значения на этой панели, надо только добавить новую запись, установить её имя и определить выражение Eval. Значения для лучшего визуального представления можно сгруппировать, добавить поля заголовков панели.

Примеры синтаксиса, выражения Eval и функций, которые могут быть использованы на этой панели, представлены и описаны ниже.

Стандартный макет сетки, имеющий определённую панель расчёта по умолчанию, может быть легко клонирован через меню: Правка > Макет сетки > Клон текущей, а так как клонированный макет может быть изменён, проверьте, как определяется его панель расчёта.

Синтаксис выражений Eval

Комментарии

Комментарии игнорируются компилятором. Есть два способа построить комментарии: Текст между левой фигурной скобки и правой фигурной скобкой является комментарий. Кроме этого, текст между двойным слэшем "//" и концом строки - тоже комментарий.

Типы и выражения

В зависимости от выражения, тип значений данных или числовой, или строковый. Для операции сравнения (=, <>,> =, <=,>, <) и сложения, оценщик выражений пытается преобразовать операнд сначала в числовые значения, а если это невозможно, то в строковые. Например: "123" + 321 возвращает 444, но результатом "X123" + 321 будет "X123321".

Числовые литералы (целочислённые и вещественные) могут быть представлены в общей десятичной системе счисления. Префикс знак доллара указывает на шестнадцатеричное число. Первая шестнадцатеричная цифра после $ должна быть 0..9 - например $ 0AF (но не $ AF).

Строковые значения могут быть заключены в двойные или одинарные кавычки. Два последовательных апострофа или двойные кавычки в кавычках же обозначают соответствующий один символ. Чтобы указать символ в коде ASCII специально используется символ # с последующим соответствующим числом констант.

Это не Логический тип. Как и в языке "C", оценщик рассматривает нулевое значение как False, а отличное от нуля как True.

Дата и время представлены числом с плавающей точкой.

Операторы

Числовые операторы: +, - , * , /, % (или mod), \ (или div), ^ (возведение в степень).

Операторы сравнения: =, <>, >, <, >=, <=.

Логические операторы: & (или and), | (или or), xor, ! (или not).

Оператор конкатенации: @.

Разница операций сложения и конкатенации в том, что @ всегда рассматривает свои операнды как строки, т.е "123" @ 321 результат "123321" (в отличие от него "123" + 321 возвращает 444).

Ссылка на колонку сетки/строку данных

Для ссылки на колонку сетки или поле метаданных, надо использовать определённую константу имени.
F = имя файла, FP = путь к файлу, DL = метка диска, DS= серийный номер диска, FS = размер файла, ФО = дата файла, T = название, S = тема, A = автор, K = ключевые слова, C = создатель, P = производитель, CD = дата создания, MD = дата изменения, НП = число страниц документа, V = версия формата файла, E = уровень безопасности, = имя архива (для сжатых архивов), C # = заданные поля, где # должен быть заменён его индексом, например, С1, С2, .., D # = динамически вычисляемая колонка, # должен быть заменён его индексом D1, D2. Циклические ссылки следует избегать, или программа заблокируется.

При оценке выражений динамических вычисляемых колонок, эти константы ссылок имён колонки представляют строковый контент расчёта текущего ряда. Так, если в динамически вычисляемое выражение введена постоянная T, она будет заменена содержанием строки 0 колонки Название при расчёте выражения в строке 0 и содержанием строки 1 колонки Название при расчёте выражения в строке 1 и т.д.

При оценке выражения "calculation", константы ссылок имён колонки представляют массив всех значений колонки при передаче функций со списком аргументов переменной, см. статистические функции ниже (например, Min(NP)), или как значение в строке 0, когда используется единственный аргумент операции, например, NP*15.

Замечание: Все поля метаданных могут ссылаться на его константу имени, даже если они не установлены видимыми в макете сетки.

Поддерживаемые функции

Функции доступа к данным сетки:

grid.numrows - возвращает количество заполненных строк активной сетки.
grid.cell (colname, RowIndex) - обеспечивает получение доступа к строке в пределах конкретного пересечения колонки/строки, определяемых соответственно ColName и RowIndex. ColName это строковое имя колонки-координаты ячейки, а RowIndex это строка-координата ячейки. Первая строка - строка 0.

Числовые функции:

Тригонометрические, гиперболические и инверсные функции:
sin(x), cos(x), tan(x), asin(x), acos(x), atan(x), cosh(x), sinh(x), tanh(x), asinh(x), acosh(x), atanh(x)
Экспоненциальные и логарифмические функции:
log(x), lg(x) (log base 10), exp(x), sqrt(x)
Целое и фракционная часть числа: int, frac
Абсолютная величина: abs
Числовой знак: sign
Случайная величина и инициализация генератора случайных чисел: rnd, randomize

Статистические функции (все статистические функции принимают список аргументов переменной):

max(x1,x2,...) - максимум переданных значений,
min(x1,x2,...) - минимум переданных значений,
min(x1,x2,...) - среднее значение,
stddev(x1,x2,...) - стандартное отклонение (беспристрастное),
stddevp(x1,x2,...) - стандартное отклонение (предвзятое),
sum(x1,x2,...) - сумма переданных значений,
sumofsquares(x1,x2,…) - сумма квадратов переданных значений
count(x1,x2,...) - количество переданных значений
variance(x1,x2,...) - дисперсия (беспристрастная)
variancep(x1,x2,...) - дисперсия (предвзятая)

Логические функции:

iff(e,x,y) - проверяет выражение передается в виде электронных и возвращает х, если это истинно, или у, если оценивается как ложное.
isnumber(x) - возвращает истину, если х есть число.

Строковые функции:

chr(x) - возвращает символ с кодом ASCII х.
length(s) - длина строки.
trim(s), trimleft(s), trimright(s) - обрезает начальные и/или конечные пробелы и управляющие символы из строки
uppercase(s), lowercase(s) - преобразует ASCII строку в верхний (нижний) регистр.
midstr(s,fron,len), leftstr(s,len), rightstr(s,len) - возвращает подстроку заданной длины, который появляется в указанной позиции (начало, конец) строки.
ReverseStr(s) - возвращает строку, указанную с с персонажами в обратном порядке.
pos(t, s) - возвращает значение индекса первого символа t, что происходит в s.
code(s) - возвращает ASCII код первого символа строки s.
stringofchar(c, count) - возвращает строку с указанным номером повторяющихся символов.
concat(s1,s2,...) - объединяет произвольное число строк.

Функции даты и времени:

date(s) - преобразует строку в числовое значение даты и времени.
now - возвращает текущую дату и время.
dayofweek(d) - возвращает день недели из значения d. Возвращает значение между 1 и 7, где 1 указывает понедельник и 7 указывает воскресенье.
year(d), month(d), day(d), hour(d), minute(d), second(d), millisecond(d) - возвращает соответствующую часть значения даты-времени d.
isleapYear(n) - указывает на конкретный год n это високосный год.
encodedate(year, month, day) - возвращает значение даты и времени, представляющее указанный год, месяц и день.
daysbetween(now, then) - возвращает двойное значение типа, представляющее разницу в днях между двумя значениями даты. DaysBetween рассчитывает только целые дни. Таким образом, DaysBetween сообщает разницу между 31 декабря 1999 11:59 вечера и 1 января 2000 11:58 вечера в 0, так как разницы в одну минуту хватает на весь день.
dayspan(now, then) - возвращает двойное значение типа, представляющее разницу в днях между двумя значениями даты. В отличие от функции DaysBetween, которая считает только целые дни, DaySpan сообщает неполные дни как часть дня.

Функции форматирования:

format(s,x) - форматирует значение с плавающей запятой х, использующего строку формата данную s. Использует формат строки такой же как формат функции Delphi FormatFloat.
formatf(s,x) - форматирует значение с плавающей запятой х, использующего строку формата данную s. Использует формат строки такой же как формат функции Delphi Format.
formatdate(s,d) - форматирует значение даты и времени d, использующего строку формата данную s. Использует формат строки такой же как формат функции Delphi FormatDateTime.
FormatFileSize(x) - форматирует целочисленное значение, представляющее размер файла в байтах удобочитаемого формата.

Переменные

Две функции определения переменых:

define("name", value) и defines("name1", "name2", "name3", ...).

Вместо defines() можно использовать следующий синтаксис:

var "name1", "name2", "name3", … end.

Для получения/указания переменной используйте функции:

get("name") и set("name", value).

Вместо get("name") можно использовать $name, а вместо set("name", value) - $name := value.

Как функции set и get, можно использовать выражение, чтобы указать имя переменной. Альтернативный синтаксис $(expression).

Есть две специальных функции для переменной приращения и декрементирования:

inc('name') и dec('name'). Вместо вызова функции можно использовать следующий синтаксис: $name++ и $name--.

Поддержка массивов не предусмотрена, но можно работать с именованными переменными "N1", "N2", "N3" ... как с массивом. Для ссылки на элемент такого "массива" используйте выражение $('arrayname'@index) или $arrayname[index] например $n[$i]. Двумерные массивы должны состоять из переменных 'x1_1', 'x1_2', 'x2_1' и так далее. Для ссылки на элемент: $x[$i,$j] (равно $('x'@$i@'_'@$j)). Многомерные массивы можно определить таким же образом.

Заявления

Есть пять специальных функций рассматриваемых как заявления. На самом деле эти функции не являются вещественными функциями, так как они компилированы в специальном байт-коде.

Процедура возврата:

return(value) - останавливает оценку и возвращает значение в результате вычислений.

Составной оператор:

block(p1,p2,p3,…) - возвращает значение последнего аргумента.

Предопределённые константы:

begin = block(
end = )

Соответствующий альтернативный синтаксис:

begin p1; p2; p3; … end.

If statement

condition(expression, p1, p2) - возвращает Р1, Р2 в зависимости от значения выражения.

Предопределённые константы:

if = condition(
then = ,begin(
else = ),begin(
endd = ))
endif = ),0)

Соответствующий альтернативный синтаксис:

if expression then p1 else p2 endd or
if expression then p1 endif.

Обратите внимание, что в первом случае заявление должно заканчиваться endd а на самом деле if expression then p1 else p2 endd равно condition(expression, block(p1), block(p2)).

Различие между функциями condition и iff в том, что iff вычисляет обе своих ветки а condition только одну. Пример

iff(1,message('1','1',0),message('0','0',0)) shows two message boxes and
if 1; message('1','1',0); message('0','0',0) end shows only first message box.

While statement

loop(expression, p)

Предопределённые константы:

while = loop(
do = ,begin(
wend = ))

Соответствующий альтернативный синтаксис:

while expression do p wend.

Repeat statement

till(p, expression)

Предопределённые константы:

repeat = till(begin(
until = ),

Соответствующий альтернативный синтаксис:

repeat p until expression end.

For statement

series(initialization, condition, increment, p)

Предопределённые константы:

for = series(
next = ))

Соответствующий альтернативный синтаксис:

for initialization; condition; increment do p next

По заявлению равно итерационного цикла C. Например:

for $i := 1; $i <= 10; $i++ do $x[$i] := $i; next

Все функции цикла возвращют количество готовых итераций.

Примеры:

Выражение для вычисления, чтобы показать общее количество байт, занимаемое файлами в активной сетке

FormatFileSize(Sum(fs))

Выражение для вычисления, чтобы показать количество байт, занимаемое меньшим файлом в активной сетке

FormatFileSize(Min(fs))

Выражение для вычисления, чтобы показать строку и имя первого файла с нулевым количеством страниц.

begin
var 'i','n' end;
$n:=grid.numrows;
for $i:=0;$i<$n; $i++ do
if grid.cell(np,$i)=0 then
return($i+1+#32+grid.cell(f,$i)+#32);
endif;
next;
return('-');
end

Выражение динамически вычисляемой колонки возвращает числовое значение из поля Заданный 1 зависящее от процентного значения, полученного из поля Заданный 2

C1*(1+C2/100)

Выражение динамически вычисляемой колонки возвращает возвращает количество дней между модификацией файла и датой создания.

DaysBetween(date(md),date(cd))

Выражение динамически вычисляемой колонки возвращает расширение файла. Полезно для сортировки по типу файла (ZIP, RAR, PDF, CHM, ...)

begin
var 'i','s' end;
$s:=an;
if $s='' then
$s:=f;
endif;
$i:=pos('.',reversestr($s));
if $i>0 then
return(lowercase(rightstr($s,$i-1)));
else
return('');
endd;
end