Как вставить текстовый файл в маткад

Обновлено: 02.07.2024

БлогNot. Mathcad: как обработать файл со смешанными числовыми и строковыми данными?

Mathcad: как обработать файл со смешанными числовыми и строковыми данными?

  • Функция READPRN("имя файла") возвращает матрицу, в которой каждая строка определяется записью (строкой) файла. Количество элементов (числовых значений) в каждой строке файла должно быть одинаковым. Используется в виде A:= READPRN("имя файла") , где A - массив;
  • Функция WRITEPRN("имя файла") записывает матрицу в файл данных. Каждая строка матрицы становится записью файла. Используется в виде WRITEPRN("имя файла"):=A , где A - массив;
  • Функция APPENDPRN("имя файла") дописывает матрицу к существующему файлу. Используется в виде APPENDPRN("имя файла"):=A . Существующий файл должен иметь столько же столбцов, что и массив A .

Эти функции предназначены для работы со структурированным файлом данных, то есть, файлом, содержащим числа, расположенные по строкам и столбцам. Как частный случай, файл может содержать одну строку или один столбец с числами, то есть, быть вектор-строкой или вектор-столбцом.

В качестве практического примера решим такую задачку:

  • средний балл по каждому предмету и каждому студенту;
  • общий средний балл группы;
  • количество оценок "2", "3", "4" и "5".

Если исходные данные сохранены в файле data.txt вида

то полный код решения выглядит так:

Если файл "неправильный", то есть, не содержит одинаковое количество числовых значений в каждой строке, то функция READPRN его не прочитает. Дополнительно мы проверяем, содержатся ли в файле допустимые оценки (то есть, значения 2, 3, 4 или 5) с помощью переменной Check .

Результаты пишутся в файл result.txt текущей папки, вот что там вышло:

Нижний правый ноль пришлось добавить, чтобы APPENDPRN не отказывалась дописывать в файл вектор-строку со средними баллами по трём предметам.

  • документ MathCAD был хотя бы раз сохранен;
  • текстовый файл data.txt был сохранен в той же папке, что и документ MathCAD;
  • в текстовом файле содержатся только числовые значения, причём, их количество в каждой строке файла одинаково (количество пробелов или табуляций между значениями в одной строке не имеет значения).

Что в нашем решении оказалось неудобно? Прежде всего то, что студенты из списка отличаются между собой только по номерам. Можно ли сделать так, чтобы Mathcad читал нормальный текстовый файл с текстом и числами, да ещё и позволял иметь разное количество разделителей в строках и разное количество чисел в одной строке?

Для решения такой задачи удобно использовать панель программирования и функцию READCSV , предназначенную для чтения произвольных текстовых данных.

Правда, при "ручной" обработке данных нам придётся проделать подготовительную работу по "чистке" и парсингу прочитанных из файла строк.

  • char(s,i) - извлечение из строки s символа с допустимым номером i ;
  • isdiv(s) - проверяет, является ли односимвольная строка s разделителем, то есть, пробелом, табуляцией или переводом строки. Возвращает 0 или 1;
  • trimstr(s) - удаляет лишние разделители в начале, конце строки, а также между лексемами. Возвращает строку из лексем, разделённых одним пробелом.

Значение системной настройки ORIGIN предполагается равным нулю (по умолчанию), опция Тооls - Worksheet options - Calculations - Use ORIGIN to string indexing не установлена, то есть, строки индексируются всегда с нуля независимо от значения ORIGIN , это тоже принято по умолчанию.

Теперь мы готовы написать функцию, которая парсит матрицу из одного столбца, содержащую записи следующего вида (файл test.txt ):

Функция предполагает, что первая из оставшихся после обработки trimstr в очередной строке лексема является строкой, попадающей в массив Names , а остальные лексемы - числовые значения, записываемые в матрицу Balls .

Существенно, что эту функцию не должны смущать не-число в данных Balls (в соответствующую позицию матрицы запишется ноль, см. оператор on error ) или разное количество чисел в строке (Mathcad автоматически "расширит" матрицу, заполняя свободные столбцы нулями).

Текстовый файл test.txt сохранён в кодировке Юникод (UTF-8), в этом случае мой новенький Mathcad 15 M045 прочитал символы кириллицы без проблем.

Остаётся проверить, что получилось, а дальше использовать массивы Names и Balls по своему усмотрению, например, как в предыдущей задаче.

P.S. Весь наш длинный код следует рассматривать, конечно, как учебный. Реально мы могли бы, настроив чтение функцией READCSV, решить задачу в 3 строчки кода:

READCSV - короткий код для чтения из файла CSV


READCSV - короткий код для чтения из файла CSV

Файл list.txt содержал лишние разделители, будучи таким:

Если файл сохранён из Блокнота, выбрать при сохранении кодировку Юникод или UTF-8, метка BOM 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


Рис.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.

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

Текстовое поле

mathcad_02_01

По умолчанию Mathcad создает математические, а не текстовые области. Чтобы ввести текст, нужно сначала объяснить программе, что Вы собираетесь это сделать. Щелкните на пустую область и поместите текстовое поле с помощью команды Математика –> Текстовое поле или используя сочетание клавиш [Ctrl+T] (использование сочетание клавиш поможет ускорить выполнение работы в Mathcad). Наберите текст, как на рисунке:

mathcad_02_02

Текст переносится автоматически, если строка подходит к правой границе текстового поля. Если поле слишком мало или находится не на том месте, его размер и положение можно изменить с помощью мыши (см. Урок 1. Введение в Mathcad).

Редактирование текста

Чтобы изменить текст, щелкните в том месте, где его необходимо изменить. На месте курсора можно вводить текст, а также удалять текст слева и справа от курсора с помощью клавиш [Backspace] и [Delete].

Чтобы выделить часть текста, щелкните левой кнопкой мыши в начале нужного фрагмента и, не отпуская кнопку, протащите указатель до конца фрагмента:

mathcad_02_03

Попробуйте отредактировать выделенный фрагмент: его можно удалить, переместить или полностью перепечатать. Отмените изменения с помощью [Ctrl+Z] – несколько раз, если необходимо. Двойной щелчок по слову выделит его.

Нажмите на текст и откройте вкладку Форматирование текста. В области команд Шрифт текста видно, что по умолчанию используется Tahoma, 11 точек.

Выделите некоторый фрагмент блока текста. Отформатируйте выделенный текст нажатием Форматирование текста –> Жирный шрифт. Отмените форматирование, повторно нажав на кнопку. Можно также использовать сочетание клавиш [Ctrl+B]. Таким образом, можно изменять стиль, размер, атрибуты и цвет выделенного текста.

Буквы греческого алфавита можно вводить, используя шрифт Symbolи вводя латинские аналоги греческих букв (например,

Сразу после запуска системы открывается окно редактирования для создания документа с именем Untitled:N, где N – порядковый номер документа (он начинается с 1) .

Если нужно создать еще один новый документ, используется команда главного меню

File – New… (Файл – Новый…)


Или кнопка на панели инструментов «Стандартная».

При этом на экран выводится текущее окно нового документа и система переходит в режим редактирования.

1.3.2 Сохранение документа в файле на диске

Для записи документа на диск с использованием его текущего имени и учетом всех произведенных изменений используется команда главного меню

File – Save (Файл – Сохранить)


Или кнопка на панели инструментов «Стандартная».

Если документ сохраняется в первый раз, на экран выводится диалоговое окно, показанное на рисунке 1.3.


В этом окне необходимо указать имя файла, в котором будет сохранен документ, выбрать папку для размещения этого файла и нажать кнопку Сохранить.

Для записи текущего документа на диск под другим именем используется команда меню

File – Save As… (Файл – Сохранить как…)

При этом на экран выводится окно сохранения файла, изображенное на рисунке 1.3. После ввода нового имени файла и нажатия кнопки Сохранить Отредактированный документ записывается на диск под новым именем, а файл-оригинал остается неизмененным.

1.3.3 Открытие ранее созданного документа

Для загрузки ранее сохраненного документа в окно редактирования используется команда меню

File – Open… (Файл – Открыть…)


Или кнопка на панели инструментов «Стандартная».

При исполнении этой команды появляется диалоговое окно открытия файла, в котором нужно указать требуемый файл и нажать кнопку Открыть. Для выбора папки, в которой размещается нужный файл, необходимо раскрыть список папок, щелкнув по кнопке со стрелкой справа от поля Папка.

1.3.4 Печать текущего документа

Для запуска печати текущего документа используется команда меню

File – Print… (Файл – Печать…)


Или кнопка на панели инструментов «Стандартная».

При выполнении этой команды появляется диалоговое окно, показанное на рисунке 1.4. В этом окне нужно установить все необходимые параметры печати:

- выбрать тип принтера из списка, раскрывающегося после щелчка по кнопке со стрелкой рядом с полем Name;

- На панели Print Region выбрать часть документа, которую требуется напечатать: All – весь документ, Pages From N1 To N2 – часть документа со страницы N1 до страницы N2, Selection – выделенный фрагмент документа, Current Page – текущую страницу.

После нажатия кнопки OK Будет произведена печать документа на выбранном принтере.


Перед печатью документа рекомендуется выполнить предварительный просмотр, чтобы убедиться, что все объекты документа удачно размещены на его страницах. Это можно сделать с помощью команды меню

File – Print Preview (Файл – Предварительный просмотр)


Или с помощью кнопки на панели инструментов «Стандартная».

Читайте также: