Где можно по подробней найдти информацию по этому языку? Знает ли ToPas оператор Case?
Макросы, Язык ToPas
Сообщений 1 страница 7 из 7
Поделиться226.04.2018 08:20:05
Где можно по подробней найдти информацию по этому языку?
К сожалению, информации очень мало, так как он не предполагался разработчиками в качестве самостоятельного инструмента пользователя.
Наименьшая значимая единица текста в выражениях или программах ToPas является символ. Символы образуют идентификаторы, ключевые слова и константы. Символы разделяются любым количеством разделителей.
Специальные символы - это символы или пары символов с одним или несколькими фиксированными значениями. Специальные символы ToPas включают следующие символы:
+ - * / ( ) [ ] = , $ @ % . ! ~ : & < > <= <> >= ; :=
Их нельзя использовать для идентификации.Идентификатор используется для обозначения констант, переменных, имен внешних баз данных и баз данных графических объектов, внутренних функций, атрибутов графических объектов, необязательных элементов таблицы и символических имен связей между внешними базами данных.
Идентификатор - это символьная строка, которая должна начинаться с буквы (символы a..z и A..Z) или подчеркивания (_) и может содержать буквы, цифры (символы 0..9) и символ подчеркивания. ToPas (идентификаторы, ключевые слова) не чувствителен к регистру. Некоторые идентификаторы имеют специальную функцию и считаются ключевыми словами.Обзор ключевых слов:
and begin block boolean
calcvalue const database datum
description div do double
downto else end for
false if list longint
mod not noinit of
or parameter readparam repeat
shl shr string then
to true until var
while write writeln xorКонстантные значения включают целые числа, действительные числа, строки, логические значения и константы типа даты.
Пробелы, разрывы строк и комментарии считаются разделителями.
Комментарий - любой текст, заключенный в составные скобки ({}).
Длина строки программы в ToPas не должна превышать 255 символов.
Ну и конкретные примеры по всей документации, дословно переводить которую смыла не было.
Поэтому мы изначально ориентировались на использование и корректировку готовых образцов, а также построитель запросов.
Знает ли ToPas оператор Case?
В списке его нет, но, возможно, Дмитрий Александрович уточнит или предложит более развернутый список функций.
Изначально, в его основу закладывались конструкции языка Паскаль - Topol+Paskal= ToPas. Не исключено, что можно использовать больше функций чем заявлено.
Поделиться326.04.2018 11:44:48
Знает ли ToPas оператор Case?
В дополнение к тому, что написал Сергей Петрович: простой совет - попробуйте, если выдаст ошибку что не знает такого, значит нельзя. ToPas - очень простой макроязык, использующий синтаксис, близкий Паскалю, но это не Паскаль. А имеющиеся описания обычно отстают от дополнений, вносимых в язык. Выделить специальных сотрудников, которые бы занимались только документацией, у коллег возможности нет.
Поделиться427.04.2018 14:44:11
Написал макрос для раскраски карты по ландшафтным характеристикам, стал проверять, работает неправильно. Например: @1.4.1.PARAMID = 2101, @1.4.1.PARAMETR =12, должен присвоить ResultValue1 := '12', а он присваивает 11; т.е. выражение <if (@1.4.1.PARAMETR:N) = 11 then>дает "TRUE", почему не пойму, все перепробовал, хотел оператор IF заменить на Case он не понимает. Может посмотрите код подскажите где ошибка?
var
ResultValue : string;
ResultValue1 : string;
ResultValue2 : string;
ResultValue3 : string;
ResultValue4 : string;
ResultValue5 : string;
ResultValue6 : string;
ResultValue7 : string;
begin
if @1.4.1.PARAMID = 2101 thenbegin
if (@1.4.1.PARAMETR:N) = 11 then ResultValue1 := '11' else
if (@1.4.1.PARAMETR:N) = 12 then ResultValue1 := '12' else
if (@1.4.1.PARAMETR:N) = 21 then ResultValue1 := '21' else
if (@1.4.1.PARAMETR:N) = 22 then ResultValue1 := '22' else
if (@1.4.1.PARAMETR:N) = 31 then ResultValue1 := '31' else
if (@1.4.1.PARAMETR:N) = 32 then ResultValue1 := '32' else
if (@1.4.1.PARAMETR:N) = 33 then ResultValue1 := '33'
end;
if @1.4.1.PARAMID = 2102 thenbegin
if (@1.4.1.PARAMETR:N) = 1 then ResultValue2 := '1' else
if (@1.4.1.PARAMETR:N) = 2 then ResultValue2 := '2' else
if (@1.4.1.PARAMETR:N) = 3 then ResultValue2 := '3'
end;if @1.4.1.PARAMID = 2103 then
begin
if (@1.4.1.PARAMETR:N) = 3 then ResultValue3 := '3' else
if (@1.4.1.PARAMETR:N) = 2 then ResultValue3 := '2' else
if (@1.4.1.PARAMETR:N) = 1 then ResultValue3 := '1' else
ResultValue3 :='0'
end
else ResultValue3 :='0';
if @1.4.1.PARAMID = 2104 thenbegin
if (@1.4.1.PARAMETR:N) = 4 then ResultValue4 := '4' else
if (@1.4.1.PARAMETR:N) = 3 then ResultValue4 := '3' else
if (@1.4.1.PARAMETR:N) = 2 then ResultValue4 := '2' else
if (@1.4.1.PARAMETR:N) = 1 then ResultValue4 := '1' else
ResultValue4 :='0'
end
else ResultValue4 :='0';
if @1.4.1.PARAMID = 2105 thenbegin
if (@1.4.1.PARAMETR:N) = 4 then ResultValue5 := '4' else
if (@1.4.1.PARAMETR:N) = 3 then ResultValue5 := '3' else
if (@1.4.1.PARAMETR:N) = 2 then ResultValue5 := '2' else
ResultValue5 :='0'
end
else ResultValue5 :='0';
if @1.4.1.PARAMID = 2106 thenbegin
if (@1.4.1.PARAMETR:N) = 4 then ResultValue6 := '4' else
if (@1.4.1.PARAMETR:N) = 3 then ResultValue6 := '3' else
if (@1.4.1.PARAMETR:N) = 2 then ResultValue6 := '2' else
ResultValue6 :='0'
end
else ResultValue6 :='0';if @1.4.1.PARAMID = 2107 then
begin
if (@1.4.1.PARAMETR:N) = 1 then ResultValue7 := '1' else
if (@1.4.1.PARAMETR:N) = 2 then ResultValue7 := '2' else
if (@1.4.1.PARAMETR:N) = 3 then ResultValue7 := '3' else
if (@1.4.1.PARAMETR:N) = 4 then ResultValue7 := '4' else
if (@1.4.1.PARAMETR:N) = 5 then ResultValue7 := '5' else
ResultValue7 :='0'
end
else ResultValue7 :='0';
ResultValue := ResultValue1 + ResultValue2 + ResultValue3 + ResultValue4 + ResultValue5 + ResultValue6 + ResultValue7;
end.
Поделиться527.04.2018 15:32:55
Основная ваша ошибка в том, что @1.4.1.PARAMID возвращает в общем случае не одно значение, а множество всех значений PARAMID, то есть не longint, а тип list of longint. Чтобы получить правильные данные, нужно либо использовать функцию SELECT, либо загрузить результаты в два списка и в цикле синхронно их анализировать. Опишите подробнее "словами", что Вам нужно, и я попробую предложить Вам решение.
Поделиться708.06.2022 15:25:21
добавить новые породы в ToPas
Дублируете в файле d:\LesIS\_Les\ToPas\PlanL2.tps соседнюю пару определений, самую близкую по классификационному коду и откорректировать коды. На примере деморегиона взят код 2026* как наиболее близкий к Б каменной по НСИ (хотя по классификатору должен быть 2028*), а код окраски - как у мягколиственных берез 302.
else if poroda = 2025 then
ResultValue := '225' { вяз }
else if poroda = 2026 then
ResultValue := '302' { береза }
редактор библиотеки стилей
Если подходящего по цвету знака нет или нужен набор с цветом, отличным от имеющихся, то пример работы с библиотеками (кажется линейных символов) есть в видеоуроках:
Создание и редактирование библиотек условных знаков. 1.4МБ
По аналогии открываете библиотеку, например, d:\LesIS\__Sis\LesIS_2.sli, копируете наиболее близкие по цвету знаки и редактируете их. Меняете по правой кнопке на ячейке ее цвет и штриховку, ставите ID по аналогии с другими породами и логикой их определения в ToPas файле.
Создайте копию библиотеки и пробуйте... пробуйте... пробуйте. Пока не получите нужный результат. Это единственный способ обучения.