Рассмотрим пример с использованием изученных библиотечных функций.
Пусть есть две строки, содержащие входные данные. Нужно заполнить матрицу из этих строк с помощью PLUS процедуры. А также нужно подсчитать и вернуть
MyMX MATRIX ,2,3
GENERATE 1
ASSIGN 1,(MyProc())
TERMINATE 1
PROCEDURE MyProc() BEGIN
TEMPORARY Str1,Str2,Cnt;
Str1="First Second Third";
Str2="0.5 0.3 1.0";
Cnt=1;
WHILE(Cnt<4) DO BEGIN
MyMX[1,Cnt]=WORD(Str1,Cnt);
MyMX[2,Cnt]=WORD(Str2,Cnt);
Cnt=Cnt+1;
END;
END;
В результате работы данной модели получится следующий массив:
First |
Second |
Third |
0.5 |
0.3 |
1.0 |
И остался последний набор библиотечных функций, который стоит рассмотреть. Это функции для работы с потоками. Таких функций всего пять, и все они приведены в таблице 6. Сразу стоит сказать, что все эти функции возвращают какие-либо значения (в основном целочисленные), а значит, их следует использовать совместно с оператором присваивания.
Также следует обратить внимание на то, что если не указывать имя файла в функции OPEN, то в качестве потока будет выступать некоторый объём оперативной памяти. Ещё стоит упомянуть о функции OPEN то, что при указании имени файла можно использовать как относительный, так и абсолютный пути.
Обратите внимание и на то, что всем функциям из таблицы 6 передаётся некоторый параметр DataStream. Данный параметр отвечает за номер потока, с которым в текущий момент идёт работа. DataStream может быть только целым положительным числом (DataStream>0). Одновременно можно открыть несколько потоков, при этом у каждого должен быть свой числовой идентификатор.
Таблица 6. Библиотечные функции для работы с потоками
Наименование |
Обозначение |
Возвращаемое значение |
Дополнительно |
Инициализация потока |
OPEN(<DataStream>,<FileName>) |
0 – нет ошибок 10 – слишком длинное имя файла 11 – ошибка чтения внешнего файла 12 – ошибка доступа к памяти при попытке доступа к существующему файлу |
Если не указано имя фала, потоком будет память |
Закрытие потока |
CLOSE(<DataStream>) |
0 – нет ошибок 41 – ошибка ввода-вывода при записи на диск 43 – неудачная попытка открытия потока |
|
Чтение из потока |
READ(<DataStream>) |
Прочитанная строка 21 – ошибка доступа к памяти при чтении из файла 22 – неудачная попытка открытия потока |
После чтения строки происходит автоматический переход на следующую строку потока. При чтении символа EOF возвращается пустая строка |
Запись строки в поток |
WRITE(<DataStream>,<String>) |
0 – нет ошибок 31 – ошибка доступа к памяти при записи 32 – неудачная попытка открытия потока |
С помощью данной команды происходит вставка строки в текущую позицию |
Переход к новой строке в потоке |
SEEK(<DataStream>,<NewLine>) |
0 – нет ошибок 51 – неудачная попытка открытия потока |
Строки нумеруются по порядку, начиная с 1 |
Если при открытии потока для записи, был указан не существующий файл, то после закрытия этого потока в файловой системе сформируется новый файл с указанным именем. Если же был указан не существующий файл при открытии на чтение, то в качестве источника потока будет – память.
При попытке записать в файл неопределённые данные (например, данные из неинициализированной ячейки матрицы), то произойдёт останов системы с ошибкой:
Operand B. Invalid expression.
Datum has not been initialized.
Что означает:
Неверное выражение в операнде B.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.