СИМУЛА - универсальный процессо-ориентированный язык моделирования, страница 18

В первом примере определяются две текстовых переменных t1 и t2, а во втором  - текстовый массив таблица размерностью n. Начальное значение текстовых переменных равно notext, т.е. пустой текст (текст, не содержащий ни одной литеры). Формально текстовую переменную можно представить как некоторый текстовой объект, этот текстовой объект имеет некоторые параметры (атрибуты), позволяющие его обрабатывать. Обращение к атрибутам текстовых объектов осуществляется при помощи дистанционного доступа, где слева от точки указывается ссылка на текстовой объект, символы текстового объекта указываются по одной, т.е. существует некоторый указатель, который указывает символ, доступный в данный момент.

Рассмотрим некоторые процедуры, которые позволяют работать с текстами.

Создание текстовых объектов

Оператор text не создает текстовой объект, а только объявляет, что данные переменные будут ссылаться на текстовые объекты. Для работы с текстом необходимо создать текстовой объект, это можно осуществить с помощью двух процедур: blanks и text.

Процедура blanks создает текстовой объект длины n. Длина текста n является формальным параметром данной процедуры, данный текст заполняется пробелами.

Процедура text также создает текстовой объект, данный объект является копией параметра данной процедуры, т.е. параметром процедуры является переменная или константа текстового типа. Значение указателя позиции после выполнения данных процедур равно единице.

text  t1,t2,t3;

t1 :- blanks(13);

t2:- text (''симула-67'');

t3 :- text (t2);

В данном примере текстовая переменная t1 имеет длину 13 символов, ее значение есть    ''                   '' (13 пробелов). Переменная t2 имеет значение ''cимула'', значение переменной t3 также равно ''cимула-67''. Для того чтобы присвоить текстовой переменной новое значение, необходимо, использовать оператор присваивания:

t1 := ''моделирование'';

В данном примере текстовому объекту T1, созданному в предыдущем примере, присваивается значение ''' моделирование '.

Присваивание текстовых значений зависит от соотношения длин текстов левой и правой частей присваивания. Если длины равны, то последовательно (слева направо) переписываются символы из текста правой части в текст левой части. Если длина переменной левой части больше длины переменной правой части, то оставшаяся часть справа заполняется пробелами, если длина переменной левой части меньше длины переменной правой части, то выдается сообщение об ошибке.

Указатели позиции в текстовых переменных остаются неизменными.

Процедуры работы с частью текста

Процедура  t.sub(i,j) в качестве своего значения дает ссылку на подтекст в тексте t, начиная с i-й литеры длиной j символов, необходимо отметить, что данная процедура не создает новый текстовый объект, а лишь дает возможность работать с частью текста t, как с текстовой переменной.

Необходимо учитывать, что значения параметров i и j не должны выходить за пределы текста t, иначе при выполнении процедуры выдается сообщение об ошибке. Указатель позиции для переменной tостается без изменения.

text  t1,t2,t3;

t1 :- ''Симула-67''

t2 :- t2.sub(1,6);

t3 :- t2.sub(8,2);

В этом случае значением переменной t2 есть ''Симула'', а t3 -''67''.

Вторая процедура работы с частью текста strip. Обращение t.strip эквивалентно обращению t.sub(1,n), где n -такое число, что символы текстового значения tв позициях с номерами больше и все пробелы, если t состоит только из пробелов, то выражение t.strip будет иметь значение notext.

text  t1,t2;

t1 :- text (''фортран             '');

t2 :- t1.strip;

В данном примере значением t2 будет ''фортран''.

Процедуры обработки текстов

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