Запросы к базе данных сигналов
Интерпретатор встроенного языка программирования поддерживает запросы к базе данных, в результате интерпретации и обработки которых база данных сигналов SDB возвращает ту или иную информацию.
Общая структура и формат запроса:
{query:
category = "фильтр_имени_категории";
group = "фильтр_имени_группы_сигналов";
name = "фильтр_имени_сигнала";
<what = "запрос"> };где query – служебное слово, обозначающее запрос к базе данных,
<what = "запрос"> – опциональное дополнение к запросу, указывающее на тип
информации, которую следует извлечь из базы данных. В качестве "запроса" допустимо
указать один из 6 типов данных:count- количество найденных данных (групп или сигналов);group- имя группы;groupnumber- порядковый номер группы, начиная с 1;caption- название сигнала;value- значение сигнала;shortname- имя сигнала, без префикса с именем группы.
Если запрос не указан, то по умолчанию возвращаемая информация — имена сигналов.
Если запрашиваемая информация — строковая, то запрос следует окружать кавычками (см. пример ниже). Если численная, то кавычки не нужны.
- Запрос количества сигналов в базе данных:
Формат запроса:
number_of_signals = {query:category = "фильтр_имени_категории"; group = "фильтр_имени_группы_сигналов"; name = "фильтр_имени_сигнала"; what = count };Тип возвращаемого значения — целое число (integer). Фильтром имени категории может выступать как имя требуемой категории, так и маска с использованием символа * (звёздочки). Аналогичным образом задаются фильтр имени группы сигналов и фильтр имени сигнала.
- Запрос имён групп сигналов, к которым принадлежат сигналы.
Формат запроса:
names_of_groups = "{ query: category = "фильтр_имени_категории"; group = "фильтр_имени_группы_сигналов"; name = "фильтр_имени_сигнала"; what = group }" ;Тип возвращаемого значения — строка (string). В возвращенной строке содержится ноль символов, если группа сигналов в базе данных не найдена, имя одной группы сигналов если найдена одна группа, и несколько имен групп сигналов, если найдено несколько групп сигналов. Имена групп сигналов в строке разделяются служебным символом ; (точкой с запятой). Фильтром имени категории может выступать как имя требуемой категории, так и маска с использованием символа * (звёздочки). Аналогичным образом задается фильтр имени группы сигналов и фильтр имени сигнала.
- Запрос номеров групп сигналов, к которым принадлежат сигналы.
Формат запроса:
numbers_of_groups = "{ query: category = "фильтр_имени_категории"; group = "фильтр_имени_группы_сигналов"; name = "фильтр_имени_сигнала"; what = groupnumber }" ;Тип возвращаемого значения — строка (string). В возвращенной строке содержится ноль символов, если группа сигналов в базе данных не найдена, номер одной группы сигналов если найдена одна группа, и несколько номеров групп сигналов, если найдено несколько групп сигналов. Номера групп сигналов в строке разделяются служебным символом ; (точкой с запятой). Фильтром имени категории может выступать как имя требуемой категории, так и маска с использованием символа * (звёздочки). Аналогичным образом задается фильтр имени группы сигналов и фильтр имени сигнала.
- Запрос имен сигналов, содержащихся в базе данных.
Если не использовано служебное слово what, то по умолчанию возвращаемая строка содержит имена сигналов, удовлетворяющих заданному фильтру. Формат запроса:
names_of_signals = "{ query: category = "фильтр_имени_категории"; group = "фильтр_имени_группы_сигналов"; name = "фильтр_имени_сигнала" }" ;Тип возвращаемого значения — строка (string). В возвращенной строке содержится ноль символов, если сигналов в базе данных не найдено, имя одного сигнала если найден 1 сигнал, и имена нескольких сигналов, если найдено несколько сигналов. Имена сигналов в строке разделяются служебным символом ; (точкой с запятой). Фильтром имени категории может выступать как имя требуемой категории, так и маска с использованием символа * (звёздочки). Аналогичным образом задается фильтр имени группы сигналов и фильтр имени сигнала.
- Запрос названий сигналов.
Формат запроса:
titles_of_signals = "{ query: category = "фильтр_имени_категории"; group = "фильтр_имени_группы_сигналов"; name = "фильтр_имени_сигнала"; what = caption }" ;Тип возвращаемого значения — строка (string). В возвращенной строке содержится ноль символов, если сигналов в базе данных не найдено, название одного сигнала если найден 1 сигнал, и названия нескольких сигналов, если найдено несколько сигналов. Названия сигналов в строке разделяются служебным символом ; (точкой с запятой). Фильтром имени категории может выступать как имя требуемой категории, так и маска с использованием символа * (звёздочки). Аналогичным образом задается фильтр имени группы сигналов и фильтр имени сигнала.
- Запрос значений сигналов.
Формат запроса:
values_of_signals = "{ query: category = "фильтр_имени_категории"; group = "фильтр_имени_группы_сигналов"; name = "фильтр_имени_сигнала"; what = value }" ;Тип возвращаемого значения — строка (string). В возвращенной строке содержится ноль символов, если сигналов в базе данных не найдено, значение одного сигнала если найден 1 сигнал, и значения нескольких сигналов, если найдено несколько сигналов. Значения сигналов в строке разделяются служебным символом ; (точкой с запятой). Фильтром имени категории может выступать как имя требуемой категории, так и маска с использованием символа * (звёздочки). Аналогичным образом задается фильтр имени группы сигналов и фильтр имени сигнала.
- Запрос с применением множественного фильтра.
Для задания множественного фильтра надо его задавать так: group = "строка_1","строка_2". Разделитель фильтров — запятая. При этом в самих фильтрах допустим символ звёздочки, например: group="LBB*CP*","LBB*CT*";
Формат запроса:
number_of_signals = { query: category = "фильтр_имени_категории"; group = "фильтр1","фильтр2","фильтр3"; name = "фильтр_имени_сигнала"; what = count };Тип возвращаемого значения в данном запросе — целое число (integer). Но в зависимости от запроса тип будет соответствующим.
Пример экспорта информации из базы данных в текстовый файл, путем использования языка программирования SimInTech:
initialization
formattext
// количество сигналов в БД
number_of_signals = { query: category = "Датчики"; group = "*"; name = "*"; what = count};
// имя группы, к которой принадлежит сигнал
names_of_groups = "{ query: category = "Датчики"; group = "*"; name = "*"; what = group}";
// номер группы, к которой принадлежит сигнал
numbers_of_groups = "{ query: category = "Датчики"; group = "*"; name = "*"; what = groupnumber}";
// по умолчанию выводятся имена сигналов в БД !!!
names_of_signals = "{ query: category = "Датчики"; group = "*"; name = "*";}" ;
// названия сигналов в БД
titles_of_signals = "{ query: category = "Датчики"; group = "*"; name = "*"; what = caption}" ;
// значение сигнала
values_of_signals = "{ query: category = "Датчики"; group = "*"; name = "*"; what = value}" ;
// короткое имя сигнала
shortname_of_signals = "{ query: category = "Датчики"; group = "*"; name = "*"; what = shortname}" ;
end;
FileID = createfile("signals.out.txt",1); // открываем существующий!!! файл на запись
writeln(FileID, number_of_signals );
writeln(FileID, names_of_groups );
writeln(FileID, names_of_signals );
writeln(FileID, titles_of_signals );
writeln(FileID, values_of_signals );
writeln(FileID, shortname_of_signals );
freeobject(FileID); // закрываем файл
end;