В данном пособии рассматриваются три основных функции доступа к файлам ASCII-формата, с помощью которых осуществляется обмен данными числового и строкового типов. Примеры использования этих функций приведены на рисунке 13.
Функция READPRN(file) читает файл и возвращает его содержимое в форме массива. При "вычислении" этой функции оператором "=" соответствующий массив отображается на экране. Эта функция может использоваться в правой части выражения, определяющего переменные или функции: например, выражение b := READPRN(file) присвоит переменной b значение массива, прочитанного из файла file.
Функция WRITEPRN(file)получает значение выражения, записанного в правой части определения, и записывает его в файл. Если, например, переменная b имеет значение массива, то выражение WRITEPRN(file):= b создаст файл и запишет в него массив b. В правой части определения допускается также использовать выражение, результатом вычисления которого является числовой скаляр.
Функция APPENDPRN(file) используется аналогично предыдущей, но, в отличие от нее не создает нового файла, а "дописывает" соответствующие данные в существующий файл (при условии соответствия структур данных).
Единственным аргументом всех этих трех функций является имя файла – константа или переменная строкового типа. При этом имя файла трактуется в стандарте MS Windows: оно может содержать имя логического диска, путь к файлу, собственно имя файла и расширение имени (с соответствующими ограничениями и возможными умолчаниями). Одно важное исключение связано с функцией WRITEPRN(file): если в аргументе этой функции не указать расширение имени файла, созданный файл получит расширение .prn.
Рисунок 13 – Использование функций доступа к файлам ASCII-формата
В результате трехкратного выполнения функции WRITEPRN() (рисунок 13 а) в текущем каталоге создаются три файла: в первый записывается значение числового скаляра (S=10), во второй – массив M, все элементы которого являются числовыми скалярами, в третий – массив T, содержащий элементы как числового, так и строкового типов. Содержимое этих файлов отображается с помощью функции READPRN() с соответствующими аргументами. Следует обратить внимание на то, что функция READPRN() всегда возвращает массив: даже в том случае, когда файл содержит единственный скаляр, эта функция возвратит одноэлементный вектор.
Функция APPENDPRN() (рисунок 13 б) соединяет два массива (аналогично функции stack) и записывает результирующий массив в файл. Оба соединяемых массива должны иметь одинаковое число столбцов.
При использовании в MathCAD-программе функций доступа к внешним файлам следует учитывать следующие особенности их реализации:
1. Eсли установлен режим Automatic Calculation (обеспечивающий автоматическое обновление результатов вычисления всех выражений после внесения любых изменений в математических областях документа), то функция WRITEPRN() будет автоматически обновлять содержимое связанного с ней файла после каждого изменения соответствующего массива данных (что естественно для режима автоматических вычислений).
2. Функция APPENDPRN() в этом же режиме ведет себя иначе: если, например, эта функция "дописала" в файл некоторый массив, а затем этот массив был изменен (выше в документе MathCAD), то автоматического обновления файла не произойдет - он останется в прежнем состоянии до тех пор, пока эта функция не будет повторно выполнена (что представляется не логичным, однако именно так реализована эта функция в MathCAD версий 8.0, 2000 и 2002i).
3. Функция READPRN()не будет автоматически обновлять связанный с ней массив сразу после внесения изменений во внешний файл данных даже в том случае, когда установлен режим автовычислений. Обновление массива произойдет только после принудительного повторного выполнения этой функции соответствующими действиями пользователя.