Элемент данных не был инициализирован.
В предыдущем примере мы заполняли матрицы из переменных, содержащих некоторые строки. Давайте предположим, что эти данные хранятся в некотором файле 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] программа – последовательность команд на каком-либо языке программирования или команд процессора, описывающая решение определённой задачи
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.