  В
этом разделе обсуждается использование функций READPRN,
WRITEPRN и APPENDPRN для работы со
структурированными файлами. Структурированный
файл данных — файл с фиксированным числом
значений на строке. Например, если
экспортировать прямоугольную область из
электронной таблицы в текстовый файл,
возникающие в результате строки и столбцы чисел
сформируют структурированный файл.
Считывание матрицы с помощью функции READPRN
Предположим, что имеется ASCII-файл, содержащий
данные, показанные ниже. Эти данные могут быть
взяты из электронной таблицы или из любого
другого источника.

Рисунок 4 показывает документ Mathcad, который
считывает эти данные в матрицу.
Функция READPRN читает весь файл данных,
определяет число строк и столбцов, и создает
матрицу из этих данных.
Когда Mathcad читает данные с помощью функции READPRN:
- Каждый раз READPRN читает файл данных целиком.
- Все строки в файле данных должны содержать
одинаковое количество значений. (Строки, не
содержащие значений, игнорируются). Если
строки в файле имеют различное число значений,
Mathcad, отмечает функцию READPRN сообщением “ошибка
файла”.
- Функция READPRN игнорирует текст в файле
данных.
- Результатом чтения файла данных является m-на-n
матрица, где m есть число строк, содержащих
данные в файле, и n есть число значений в
строке. Чтобы создать матрицу из значений в файле
данных, используйте равенство, подобное M: = READPRN(file).
Не используйте нижние индексы для M.
Функция READPRN возвращает матрицу, поэтому
нижние индексы излишни.
- Чтобы читать из файла с именем, которое не
совпадает с именем файловой переменной, либо из
файла, находящегося не в каталоге по умолчанию,
выберите Присоединить к файлу из меню Файл.
Подробнее см. раздел “Импортирование
данных из других каталогов”.
Предупреждение: Каждая строка в файле
данных должна содержать одинаковое число
значений. Если оставить промежутки там, где Mathcad
ожидает значение, функция READPRN не сможет
прочитать файл. Mathcad определяет конец одного и
начало следующего значения, ища пробелы или
запятые.
Иногда каждый столбец значений в файле данных
представляет отдельную переменную. Рисунок 5
показывает, как использовать верхние индексы,
чтобы создать вектор из каждого столбца в файле
данных.

Рисунок 4: Считывание таблицы данных в матрицу.

Рисунок 5: Присваивание различным переменным
значений из разных столбцов в файле данных.

Рисунок 6: Запись данных в структурированный
файл данных.
Запись данных при помощи функций WRITEPRN и APPENDPRN
Рисунок 6 показывает, как использовать функцию WRITEPRN,
чтобы записать данные в структурированный файл
данных.
Когда Mathcad обрабатывает документ из Рисунка 6,
создается файл данных, содержащий следующие
значения:

В отличие от WRITE функция WRITEPRN записывает
данные в виде столбцов. Обратите внимание, что,
поскольку для PRNPRECISION установлено значение
четыре, числа записаны с четырьмя знаками после
запятой. Поскольку значение PRNCOLWIDTH равно
восьми, каждый столбец имеет ширину в восемь
символов. Так как PRNPRECISION и PRNCOLWIDTH могут
изменяться независимо, нужно не упустить из виду,
что ширина столбца должна быть такой, чтобы
разместились все необходимые цифры вместе с
пробелом, разделяющим отдельные значения.
Когда используется функция WRITEPRN:
- Равенства, содержащие WRITEPRN, должны быть
следующего вида. Слева записывается WRITEPRN( file),
где file — имя файловой переменной, затем
следует символ определения (:=) и выражение,
возвращающее матрицу. Не используйте
дискретные аргументы или нижние индексы с WRITEPRN .
- Каждое новое равенство записывает новый файл.
Если два равенства пишут в один файл, данные,
написанные вторым равенством уничтожат данные,
написанные первым. Используйте APPENDPRN, если
нужно дописать значения к файлу вместо того,
чтобы перезаписать файл. APPENDPRN function
- Встроенные переменные PRNCOLWIDTH и PRNPRECISION определяют
формат файла данных, создаваемого Mathcad. Текущее
значение PRNCOLWIDTH определяет ширину столбцов (в
символах). Текущее значение PRNPRECISION
определяет число используемых значащих цифр. По
умолчанию PRNCOLWIDTH = 8 и PRNPRECISION = 4. Чтобы
изменить эти значения, выберите Встроенные
переменные из меню Математика или
поместите соответствующие определения в
документ Mathcad выше места использования WRITEPRN,
как показано на Рисунке 7.
- Если записываемый массив является составным
(чьи элементы являются сами массивами), либо
комплекснозначным, то тогда WRITEPRN создаст не
просто ASCII-файл, а файл специального формата,
который навряд ли будет читаем другими
прикладными программами. Этот файл может, однако,
читаться функцией READPRN.

Рисунок 7: Документ, который создаёт файл
данных со столбцами шириной в 10 символов,
содержащий числа с 5 значащими цифрами.
Используя функцию augment, можно объединять
отдельные переменные в массивы, и записывать их
все в файл данных. Рисунок 8 показывает, как это
делать.

Рисунок 8: Запись нескольких векторов,
объединённых вместе.
Преимущества использования READPRN и WRITEPRN
Использование READPRN, как правило,
предпочтительнее использования READ. Когда
данные структурированы в столбцы, READPRN
переводит данные в Mathcad в легкодоступной форме.
Если некоторые строки в файле данных имеют
большее количество значений, чем другие, данные
могут быть потеряны. Используйте текстовый
редактор, чтобы заменить пропущенные значения на
нули перед использованием READPRN.
Функция READ используется для файлов, в
которых значения одной переменной разбросаны по
нескольким строкам. Таковы файлы, созданные WRITE,
которая располагает столько чисел на строке,
сколько строка может вместить.
Помните: используйте нижний индекс, являющийся
дискретным аргументом, чтобы читать с помощью READ;
не используйте нижний индекс, чтобы читать с
помощью READPRN.
Обычно WRITEPRN производит более читаемые
файлы, чем WRITE, поскольку данные в них
аккуратно расположены в строках и столбцах. С
другой стороны, WRITE производит меньшие файлы,
чем WRITEPRN, потому что ей не нужно добавлять
пробелы для выравнивания данных.
Используйте WRITE вместо WRITEPRN, когда
требуется напихать так много значений, сколько
возможно, в малый файл данных.
 
|