Импорт и экспорт данных в MathCAD

Импорт и экспорт данных в MathCAD

Продолжая публикацию избранных статей из готовящейся в издательстве "Новое знание" книги "Вычисления в MathCAD. Практическое руководство" и учитывая пожелания читателей "Компьютерной газеты", сегодня мы решили немного разобраться с таким небезынтересным с практической стороны вопросом, как взаимосвязь MathCAD и MS Excel в плане обмена данными между двумя этими системами, а также c принципами организации того же обмена, но уже в аспекте работы с обычными текстовыми ASCII-файлами.

Excel
В том случае, если вы хорошо владеете Excel, вам совершенно не обязательно осваивать многие разделы в MathCAD. К тому же, вопросы, связанные со статистической обработкой данных и всевозможными бизнес-задачами, решаются в нем гораздо проще (и возможности Excel в этих областях гораздо шире). С другой стороны, MathCAD обладает несравнимо более высоким потенциалом в сфере обработки экспериментальных данных (интерполяции, регрессии и экстраполяции), поэтому, даже если результаты ваших измерений были записаны в виде электронной таблицы, строить исходя из них графики и диаграммы все же лучше в нем.
Дело в том, что экспортировать данные из таблицы Excel в матрицу MathCAD можно просто скопировав их и вставив затем в пустую таблицу ввода. Однако провести обратную операцию (т.е. данные из матрицы MathCAD экспортировать в Excel) используя таблицу ввода (Input Table) не получится. Для выполнения этой задачи следует задействовать таблицу Excel как компонент MathCAD.
Компонентами в MathCAD называются приложения или объекты из других приложений, которые могут принимать непосредственное участие в работе создаваемого вычислительного алгоритма. Учитывая глобальность распространенности таких систем, как Excel или MatLab, возможность MathCAD осуществлять с ними согласованную работу просто неоценима, т.к. это значительно расширяет потенциал всех этих программ. Именно по этой причине создатели MathCAD посвятили целый раздел Центра Ресурсов (Extending MathCAD — подробно здесь мы его обсуждать не будем) примерам по использованию компонентов.
Для того чтобы установить один из компонентов, прежде всего вы должны открыть специальное диалоговое окно Component Wizard (Мастер компонентов). Сделать это можно при помощи команды Component (Компонент) меню Insert (Вставить) или, лучше, задействовав одноименную кнопку панели Standard (Стандартные).
В стандартной установке MathCAD компонентов совсем немного — около 10. Говорить обо всех мы не будем, а ограничимся освещением двух наиболее часто используемых. Необходимую информацию об остальных компонентах заинтересованный читатель сможет найти в справочной системе программы.
Чтобы вставить в документ MathCAD электронную таблицу Excel, выполните следующие операции:
— Запустите, задействовав соответствующую команду меню Insert (Вставить) или кнопку панели Standard (Стандартные), диалог Component Wizard (Мастер компонентов).
— В списке появившегося окна выберите строку Excel и нажмите кнопку Next (Далее).
— В открывшемся диалоговом окне Excel Setup Wizard (Мастер установки Excel) вы должны выбрать один из имеющихся параметров в зависимости от типа решаемой проблемы. Так, если вам требуется провести экспорт каких-то данных из MathCAD в Excel с целью их обработки, то активизируйте опцию Create an empty Excel worksheet (Создать пустой документ Excel). Если же вы собираетесь импортировать в MathCAD данные из существующего Excel-файла, то отметьте настройку Create from file (Создать из файла).
— Любой компонент может быть вставлен в документ MathCAD как в своем обычном виде (для Excel это будет таблица), так и в форме маленькой картинки — иконки (Icon). Никаких различий в работе с компонентом в этих двух формах не существует, поэтому выбор типа его вида должен определяться вашими предпочтениями и спецификой решаемой задачи (использование иконок позволяет значительно экономить место на документе). По умолчанию компонент вставляется в своем обычном виде. Для того чтобы представить его в форме иконки, задействуйте параметр Display as Icon (Отобразить как иконку) диалогового окна Excel Setup Wizard (Мастер установки Excel) (рис.1).

Рис.1. Иконка компонента Excel

— Когда все необходимые настройки в окне Excel Setup Wizard (Мастер установки Excel) будут сделаны, нажмите Next (Далее).
— При помощи опций появившейся второй страницы диалогового окна Excel Setup Wizard (Мастер установки Excel) вы должны определить, с какой ячейки будут читаться (или записываться) данные из документа Excel.
Практически это следует сделать с первой (A1) ячейки, так что вносить какие-либо изменения в принятые по умолчанию настройки вам почти наверняка не придется (рис.2).

Рис. 2. Настройка параметров компонента Excel

— Нажмите Finish (Готово).
В результате осуществления описанных выше действий в документе MathCAD появится таблица, очень похожая на обычную таблицу ввода (Input Table). В том случае, если вы вставляли пустой лист Excel, она будет содержать оператор присваивания (для того чтобы вы могли задать ей имя и работать в дальнейшем, как с обычной матрицей) и маркер, в котором вы должны прописать имя матрицы, данные из которой следует занести в таблицу.
Прочитав матрицу значений MathCAD в таблицу Excel, провести необходимые расчеты вы можете, просто выполнив по ней двойной левый щелчок мышью. При этом все рабочие панели MathCAD будут заменены инструментами Excel, и нужные преобразования можно будет сделать точно так же, как и при непосредственной загрузке программы. Выполнив затем щелчок мышью по рабочей области, вы вернетесь в нормальный режим.
В качестве примера согласованной работы MathCAD и Excel приведем расчет среднеквадратичного отклонения выборки, полученной при помощи генератора случайного равномерно распределенного числа rnd MathCAD с использованием специальной встроенной функции СТАНДОТКЛОН Excel. Результаты этого расчета представлены на рис.3.

Рис. 3. Работа с компонентом Excel

File Read or Write (Прочитать или записать файл)
Нельзя не согласиться, что MathCAD предоставляет замечательные возможности в области обработки данных. Множество встроенных статистических функций, функции интерполяции и регрессии, разнообразие графиков и поверхностей позволяют наилучшим образом представить полученные вами результаты измерений. Самая трудная задача при этом — перевод данных в доступный для MathCAD вид. Конечно, если измерений было проведено немного, то соответствующие матрицы и векторы можно создать и непосредственно, заполнив их вручную. Однако, если данных много, то такой способ может быть неэффективен.
Значительно облегчить задачу обработки данных может то, что MathCAD способен считывать информацию из текстовых, или ASCII-файлов. Вообще, ASCII-форматы очень распространены, и такого рода файлы создаются как при работе моделирующих алгоритмов на C или "Фортране", так и программами, управляющими всевозможными измерительными приборами. Кроме того, ASCII-файл вы можете создать, распознав при помощи специальной программы (например, FineReader) просканированный документ.
MathCAD способен читать как структурированные, так и неструктурированные ASCII-файлы. При этом в первом случае результатом будет стандартный для программы вектор, во втором — соответствующая матрица.
При помощи MathCAD можно не только прочитать, но и записать ASCII-файл. Кстати, практически любая широко используемая программа может как экспортировать, так и импортировать ASCII-файлы. Учитывая это, описываемая возможность MathCAD может оказаться весьма и весьма полезной.
Наиболее простым для восприятия системой форматом ASCII-файла является неструктурированный текстовый документ. Термин "неструктурированный" означает, что в приведенном документе важна лишь последовательность числовых значений, а не их принадлежность к тому или иному столбцу или строке. Такие ASCII-файлы генерируются, например, управляющими различными измерительными установками C или "Паскаль" программами, которые записывают данные в строчку последовательно друг за другом. Когда лимит длины строки оказывается превышен, ASCII-редактор автоматически осуществляет перевод на следующую. Открыв неструктурированный ASCII-файл, вы увидите простую последовательность чисел. Более сложным случаем является чтение структурированного текстового файла, т.к. при этом приходится учитывать принадлежность значения к определенным строке или столбцу. Структурированные ASCII-файлы встречаются на практике гораздо чаще, чем неструктурированные, поэтому особенности использования соответствующих специальных функций мы опишем исключительно на их примерах.
Для того чтобы прочитать данные из текстового документа, используйте специальную встроенную функцию READPRN("file"), где file — это имя текстового файла (если он сохранен в том же каталоге, что и MathCAD) или путь к файлу (если он расположен, например, на Рабочем столе). При помощи этой функции можно импортировать данные не только из файлов с расширением .prn, но и из файлов любых других форматов, использующих кодировку ASCII: .dat, .txt и пр.
В предыдущих версиях программы для импортирования данных из неструктурированного текстового файла существовала специальная функция READ. Однако в настоящее время она считается устаревшей, и во всех случаях рекомендуется использовать функцию READPRN.
Для того чтобы в MathCAD было возможным импортирование данных из текстового файла, следует учитывать следующие правила:
— Числа в ASCII-файле должны быть разделены либо пробелами (одним или несколькими), либо запятыми (но ни в коем случае не точками), либо символами табуляции, либо (при использовании функции READ) управляющими символами перевода строки.
— Для отделения целой части числа от десятичной следует использовать точку, а не запятую. Особое внимание на этот факт стоит обратить в том случае, если вы собираетесь использовать данные, полученные в русифицированной версии Excel, т.к. в числах она использует принятый в странах бывшего СССР формат с запятой.
— Одинаково эффективно MathCAD может считывать как целые, так и десятичные числа. Однако следует помнить, что количество знаков в них не должно превышать 15. Числа со степенью должны быть представлены в инженерном формате (например, числу 1.234•10-6 в нем соответствует запись 1.234E-6). Для того чтобы записать в ASCII-файл комплексные числа, их действительные и мнимые части должны быть заданы по отдельности. Сформировать же затем по полученным при прочтении текстового файла векторам соответствующий вектор комплексных чисел можно довольно просто, организовав цикл при помощи оператора ранжированной переменной.
— В том случае, если вы собираетесь прочитать структурированный ASCII-файл, учтите, что число элементов во всех строках должно быть одинаковым. В противном случае система выдаст сообщение об ошибке: "Can't understand something in this data file. If this file came from spreadsheet, make sure you saved it ASCII text only" — "Не все возможно распознать в этом файле данных. Если этот файл был получен из электронной таблицы, проверьте, что вы его сохранили только как текст ASCII" (рис.4).

Рис.4. Ошибка при импортировании данных

— Пустые строки и столбцы, содержащие ASCII-текст, при считывании игнорируются.
MathCAD может не только импортировать, но и создавать на основании матриц структурированные .prn-файлы. Для этого в систему встроена специальная функция WRITEPRN("file"), где file — имя создаваемого файла. Интересной особенностью этой функции является то, что не она присваивается, а, наоборот, ей присваивается значение некоторой матрицы. Например, запись WRITEPRN("C:\Samples\ M.prn"):=M означает, что соответствующий матрице M ASCII-файл M.prn будет создан в корневой папке Samples диска С:.
Работая с функцией WRITEPRN, нужно учитывать следующие факты:
— В том случае, если вы пропишете только имя файла без пути к нему, WRITEPRN сохранит его в каталоге программы.
— WRITEPRN может создавать файлы не только с расширением .prn, но и в любом другом ASCII-формате, например, .dat или .txt. Расширение создаваемого файла вы задаете, когда прописываете его имя в скобках рассматриваемой функции.
— Если файл с указанным для WRITEPRN именем уже существует, то он автоматически заменяется без обычного для Windows предупреждения.
— В записанном при помощи WRITEPRN текстовом файле значения будут разделены пробелами. В качестве десятичного знака будет использована точка.
— По умолчанию количество знаков импортируемых из MathCAD численных данных ограничено 4. Хотя это и соответствует обычным правилам отображения чисел в MathCAD, в ряде случаев подобный подход может быть неприемлем. В том случае, если вам надо экспортировать данные с более высокой точностью, вы можете увеличить количество сохраняемых знаков. Для того чтобы это сделать, обратитесь к закладке Builds-In Variables (Системные переменные) диалогового окна Math Options (Математические опции) меню Math (Математические). Здесь в окошке параметра PRNPRECISION задайте необходимый уровень точности. Очевидно, что наибольшая величина PRNPRECISION должна равняться 16.
— Увеличивая точность экспортируемых данных, вы должны учитывать, что по умолчанию ширина столбца создаваемого WRITEPRN текстового файла соответствует 8 знакам. Следовательно, если PRNPRECISION превышает это значение, то ширину столбца следует увеличить (если этого не сделать, данные не сольются, однако значения в соседних столбцах будут расположены вплотную друг к другу, что значительно снижает наглядность). Сделать это можно при помощи параметра PRNCOLWIDTH закладки Build-in Variables (Системные переменные). Величина ширины столбца в MathCAD не лимитируется.
— Соответствующие определения для PRNPRECISION и PRNCOLWIDTH можно сделать и непосредственно в документе (аналогично TOL и CTOl), что гораздо проще и техничнее, чем использование закладки Build-in Variables (Системные переменные) диалогового окна Math Options (Математические опции).
— В том случае, если в исходной матрице содержались элементы с порядком, то в созданном при помощи WRITEPRN файле они будут представлены в инженерном формате.

Рис.5. Запись данных в текстовый файл при стандартных настройках

Иногда требуется не создать новый текстовый файл, а лишь добавить новую информацию к уже существующему. В MathCAD задачи такого рода можно решать при помощи функции APPENDPRN("file"), где file — имя файла (или путь к нему), к которому нужно дописать сведения. По особенностям своего синтаксиса функция APPENDPRN полностью соответствует функции WRITEPRN, поэтому останавливаться на этом вопросе мы не будем. Естественным условием при записи значений матрицы в конец некоторого текстового файла является то, что число их столбцов должно совпадать.
В предыдущих версиях MathCAD существовали специальные функции WRITE и APPEND, предназначенные для записи данных в неструктурированный текстовый файл. Однако начиная с версии программы 2001 года эти функции считаются устаревшими (что вполне оправданно, т.к. неструктурированный текст — это просто частный случай структурированного).
О функциях, предназначенных для чтения (и, соответственно, записи) данных из текстового файла (READPRN и WRITEPRN), мы довольно подробно говорили в предыдущей главе. Однако в MathCAD подобную работу можно выполнить и гораздо проще, обратившись к специальному компоненту File Read or Write (Прочитать или записать файл). Так, например, для того чтобы прочитать таблицу значений из .prn-файла в матрицу, следует:
— В окне Component Wizard (Мастер компонентов) выбрать строку File Read or Write (Прочитать или записать файл) и нажать Next (Далее).
— В появившемся диалоговом окне File Read or Write Wizard (Мастер записи или чтения файла) задействовать опцию Read from file (Читать из файла) и нажать кнопку Next (Далее).
— На следующей странице окна File Read or Write Wizard (Мастер записи или чтения файла) определить тип читаемого файла. Сделать это надо в списке File Format (Формат файла). В нашем случае нужно оставить определенный по умолчанию пункт Text Files (Текстовые файлы).
— Заполнить строку Enter the name of the file or data source which will be associated with this component (Введите имя файла или источника данных, который будет соединен с этим компонентом). В ней нужно прописать либо имя файла (если он сохранен в том же каталоге, что и MathCAD), либо путь к нему (для чего удобно использовать кнопку Browse (Обзор)).
— Нажать Next. При этом в документ MathCAD будет вставлен компонент в виде иконки с незаполненным оператором присваивания. Проименовав компонент, вы получите совершенно обычную матрицу, с которой можно будет проводить все допустимые в MathCAD преобразования (рис.6).

Рис.6. Чтение данных из текстового файла

Столь же просто, как и прочитать, вы можете записать текстовый файл, используя тот же компонент.
Кстати, при помощи компонента File Read or Write (Чтение или запись файла) вы можете считывать информацию из электронных таблиц, причем делается это даже легче, чем при использовании компонента Excel.

Дмитрий Гурский, dagi@tut.by
Юрий Стрельченко, dot@omen.ru



Компьютерная газета. Статья была опубликована в номере 02 за 2003 год в рубрике soft :: текст

©1997-2024 Компьютерная газета