Изучение основ моделирования в среде GPSS World. Создание пользовательских переменных. Блоки и команды для манипуляции с сохранёнными данными, страница 10

Элемент данных не был инициализирован.

В предыдущем примере мы заполняли матрицы из переменных, содержащих некоторые строки. Давайте предположим, что эти данные хранятся в некотором файле MyFile.txt в следующем виде:

First

Second

Third

0.5

0.3

1.0

Давайте составим программу, для заполнения матрицы.

MyMX              MATRIX       ,2,3

GENERATE     1

ASSIGN       1,(MyProc("MyFile.txt"))

TERMINATE    1

PROCEDURE         MyProc(FileName)              BEGIN

TEMPORARY    RCount,CCount;

Err=Open(1,FileName);

IF(Err'E'0) THEN BEGIN

CCount=1;

WHILE(Ccount'L'3) DO BEGIN

RCount=1;

WHILE(RCount<4) DO BEGIN

MyMX[CCount,RCount]=READ(1);

RCount=RCount+1;

END;

CCount=CCount+1;

END;

END;

Err=Close(1);

END;

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

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

Помимо библиотечных процедур для работы с потоками, существуют стандартные блоки GPSS для той же цели. Эти  блоки практически идентичны библиотечным функциям. Данные блоки с описанием параметров приведены в таблице 7.

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

Таблица 7. Стандартные блоки для работы с потоками

Наименование

Обозначение

A

B

C

D

Инициализация потока

OPEN    A,B,C

Описание потока (например, имя файла)

Номер потока

Альтернативный блок, для перехода в случае ошибки

Закрытие потока

CLOSE   A,B,C

Параметр транзакта, куда заносится код возврата

— " —

— " —

Чтение из потока

READ     A,B,C

Параметр транзакта, куда записывается прочтённая строка

— " —

— " —

Запись в поток

WRITE             A,B,C,D

Текстовая строка для записи. Т.е. то, что заносится в поток

— " —

— " —

Режим вставки (OFF/ON)

Переход к новой строке в потоке

SEEK      A,B

Номер строки для перехода

— " —

Поскольку речь зашла о файлах, то стоит вспомнить ещё одну стандартную команду – INCLUDE. Данная команда имеет единственный операнд A, в который передаётся имя подключаемого файла. Данная операция аналогична использованию следующего синтаксиса в C++:

#include <stdio>

Иначе говоря, можно создаваемую модель описывать в разных файлах. Например, в одном описываются команды определяющие МКУ и матрицы, во втором – необходимые процедуры, а третий будет являться собственно самой моделью (файлом модели оболочки GPSS World). Тогда в файле модели можно будет прописать подключение необходимых файлов.

Также надо учесть, что данная команда является интерактивной, т.е. её можно использовать после трансляции основной модели.



[1] программа – последовательность команд на каком-либо языке программирования или команд процессора, описывающая решение определённой задачи