Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
В.Д. Боев, Р.П. Сыпченко.docx
Скачиваний:
179
Добавлен:
19.09.2019
Размер:
7.07 Mб
Скачать

8.1.3. Блок read

Блок READ предназначен для считывания из потока данных текстовой строки. Формат блока:

READ A,[B],[C]

Операнд А - номер или имя параметра транзакта, в который записывается считанная из потока ввода или потока в памяти строка, находящаяся на позиции текущей строки. После считывания позиция текущей строки увеличивается на единицу. Если такой параметр активного транзакта не существует, он создается.

Операнд В - номер потока данных, из которого производится считывание. По умолчанию равен 1, т. е. если операнд В не используется, считывание производится из потока номер один.

Операнд С - метка блока, в который направляется транзакт в случае ошибки считывания. Если операнд С не используется, код ошибки все равно сохраняется. Для его получения нужно использовать блок CLOSE. Коды ошибок:

  • 21 - во время попытки выполнить чтение был запрещен доступ к памяти;

  • 22 - файл не был открыт.

Например:

READ Stroka_Text,4,Kon5

В примере блок READ считывает текстовую строку из потока данных номер 4 и записывает в параметр транзакта с именем Stro-ka_Text. Если текстовая строка считывается без ошибки, а параметр активного транзакта не существует, он создается. В случае ошибки строка не считывается и активный транзакт направляется к блоку с меткой Kon5.

8.1.4. Блок write

Блок WRITE предназначен для передачи текстовой строки потоку данных. Формат блока:

WRITE A,[B],[C],[D]

Операнд А - текстовая строка, которая должна быть передана потоку данных.

Операнд В - номер потока данных, по умолчанию равен 1.

Операнд С - метка блока, в который направляется транзакт в случае ошибки записи. Коды ошибок:

  • 0 - нет ошибки;

  • 31 - во время попытки выполнить запись был запрещен доступ к памяти;

  • 32 - файл не был открыт.

Операнд D - задает режим работы блока WRITE. Если операнд D не используется (по умолчанию) или равен ON, блок WRITE работает в режиме вставки. Если операнд D равенOFF - в режиме замены.

Режим вставки:

  • все текстовые строки, находящиеся на или за позицией текущей строки, сдвигаются на одну позицию;

  • если позиция текущей строки находится далеко за последней текстовой строкой, она устанавливается сразу после последней строки потока данных;

  • копия новой текстовой строки помещается на позицию текущей строки;

  • позиция текущей строки увеличивается на единицу. Режим замены:

  • если позиция текущей строки находится далеко за последней текстовой строкой, все промежуточные позиции заполняются нулевыми текстовыми строками;

  • текстовая строка, находящаяся на позиции текущей строки, удаляется;

  • копия новой текстовой строки помещается на позицию текущей строки;

  • позиция текущей строки увеличивается на единицу. Пример:

WRITE "INITIAL MX$TDon(1,1),420",5,Met3

В этом примере блок WRITE передает текстовую строку потоку данных с номером 5. Если происходит ошибка, активный транзакт переходит к блоку с меткой Met3. Иначе он переходит к следующему по порядку блоку. Если в данном случае поток данных является потоком вывода или потоком в памяти, запись производится в режиме вставки, так как операнд D не используется.

Замечание 1. Если операнды С блоков OPEN, CLOSE, READ и WRITE не используются, ошибка игнорируется. Обычно эти операнды используются для того, чтобы направить активный транзакт на блок CLOSE, который код ошибки помещает в параметр транзакта. Из параметра можно записать код ошибки в сохраняемую ячейку и завершить моделирование. Значение ячейки будет выведено в стандартном отчете.

Замечание 2. При построчном считывании данных из файла может оказаться, что на позиции текущей строки нет строки данных. Это происходит тогда, когда из файла считаны все текстовые строки. В данном случае активный транзакт входит в блок READ и далее направляется к блоку, метка которого указана операндом С. Код ошибки при этом не сохраняется.