Матросов А.В. Maple 6. Решение задач высшей математики и механики (1185909), страница 60
Текст из файла (страница 60)
Использование новых возможностей объектно-ориентированной парадигмы программирования в Мар!е с помощью модулей, а также создание и вызов внешних процедур, написанных на языке С, требует более глубоких знаний в области информатики. В последнем разделе данной главы мы кратко коснемся основных аспектов использования модулей и внешних процедур. 5.3. Работа с файлами Мар)е — это система и язык, прежде всего предназначенные для выполнения математических преобразований и вычислений. Однако часто возникает необходимость во взаимодействии с другими системами и программами: либо результаты вычислений в Мар!е следует сохранить в формате, понимаемом другим приложением, либо, наоборот, получить и обработать данные, Часть (. Основы (Иар(в созданные другим приложением.
Иногда при разработке программ Мар(е возникает необходимость получить некоторую информацию от пользователя или отобразить некоторые промежуточные результаты непосредственно на рабочий лист или в файл, расположенный на диске. Для выполнения подобных действий в Мар1е предусмотрен большой набор команд ввода/вывода, которые можно использовать как в интерактивном режиме, так и в программах Мар!е. Очень часто для взаимодействия с другими приложениями достаточно записать данные в текстовый файл в виде таблицы значений или, наоборот, прочитать подобную таблицу данных из файла, подготовленного дру~им приложением. В Мар!е эти действия проще всего выполнить с помощью команд ытатеоата(( и теабсаса().
Команда нтьсес(ьса (( записывает в текстовый файл данные, представленные в Мар!е множеством, списком, вектором, массивом или списком списков !тип 1ььс1ьвс), и имеет следующий синтаксис: нгасес(ась(иыя файла, данные [, формат (, процедура ) ]( Параметр ныл Файла либо представляет строку, содержащую полное имя файла в соответствуюшей операционной системе, либо является дескриптором файла, создаваемым при его открытии командой горец(к Использование имени файла эффективнее с той точки зрения, что в этом случае команда гьсесась(( автоматически открывает и закрывает файл, если он существует, а также создает новый файл с указанным именем в случае его отсутствия.
Если запись осуществляется в существующий файл, то он сначала очищается, а потом начинается запись в него нового содержания. Параметры ныв фааць и данные являются обязательными, тогда как два других могут быть опущены. Если данные представляют множество, список или вектор, то каждый элемент записывается в новой строке файла; если данные представлены массивом или списком списков, то каждая строка матрицы или подсписок списка записывается в файл отдельной строкой, в которой элементы отделены пробельными символами.
Параметр формат может иметь значение ьстечет, г1оьт или встьсс и определяет тип записываемых данных и как они преобразуются при их записи в текстовый файл. Если он опушен, то используется формат г1сае, предполагающий, что данные являются числовыми, и преобразуюший их в формат вешественных чисел с плавающей точкой с количеством значащих цифр в мантиссе„соответствующим текущему значению системной переменной шдьсз. Формат ьцседет также работает с числовыми данными, но при записи преобразует их к целым числам, отбрасывая дробную часть.
Если данные представляют строки Мар1е, то в этом случае следует использовать формат встьцч, В случае двумерной матрицы данных или списка списков можно определить формат преобразования каждого столбца с помошью списка допустимых значений параметра фор4ьт. 325 Глава 6. Основы программирования в Мар)е ргоо(Г, х) Грг1ппг"(Г, таа", х) епп' ргос В примере 5.23 в текстовый файл с именем 0:~Тетр),й))е (хг записывается содержимое матрицы размерности 4х2. , 'т(~ф .-',,'4~)8)4тйв(3]ййтйщ+~ФФфф~фй4))8) о~88~;=",;," -*!~' ..
> А:.=аггау([ [1.0, 0.0000), [1.1, 4.01234567890123456789], [1.2, 1.9874), [1.3, 2.0764) 1.0 О. !.1 4.0!234567890!23456789 А:= 1.2 1.9874 1.3 2.0764 > нггпедапа("П:ОпешрОг"11е.пхп",А, (Й1оап, 61оап), ргос(г, х) Грг1ппб(Г, "та", х) егх( ргос); Для учебных целей в команде гес)ага() задана необязательная процедура преобразования нечисловых данных, если бы они встретились в исходной матрице. Например, эта команда отработала бы без ошибок, если злемент А[1,1] равнялся бы формуле х"2 или строке "хуг53 Результатом выполнения команд примера 5.23 будет создание файла со следующим содержимым: 1.0 1.1 1.2 1.3 0 4.0123456789 1. 9874 2.0764 Обратите внимание, что мантисса всех чисел не превосходит заданной по умолчанию точности 0191ге-10, которая использовалась при записи данных в файл, хотя некоторые числа в матрице А определены с большей мантиссой.
Команда геас)4(апа() ЧИтаЕт табулированные данные, хранящиеся в тексто- вом файле. Ее синтаксис имеет следующий вид: геас)4(апа(имл файла 1, формат ) [, число оталопов) ) Необязательный параметр процедура задает процедуру, которая используется для преобразования данных в выводимой структуре, если они не соответствуют указанному в параметре формат типу. Например, при заданном формате 51оаг встретилась строка символов. Если необязательная процедура не задана, то по умолчанию выводится сообщение о неправильных данных и никакого вывода в файл не происходит. Рекомендуется использовать следующую процедуру, которая без сообщения о несоответствии типа данных выводит в текстовый файл любые данные Мар!е: Часть 1 (3с))овы )Ыар!е ЗЯб Параметр ама файха имеет такой же смысл, что и аналогичный параметр КОМаНдЫ етггесаеа().
ЕСЛИ ОН Задаи В ВИДЕ ПОЛНОГО ИМЕНИ файЛа, тО ЭтОт файл автоматически открывается только для чтения и закрывается по завершении команды теасыага (). Необязательный параметр фор ае определяет тип хранящихся в файле данных и способ их преобразования при чтении в Мар!е и может иметь три ЗНаЧЕНИЯ Гоеечет, Гтоаа И агтьоч, ПОЛНОСТЬЮ СООтВЕтСтВУЮЩИХ аНаЛОГИЧНЫМ значениям параметра формат команды етзеесаса (). Значением по умолчанию является ггоас. По умолчанию команда таас(с(ага () читает только первый столбец данных из текстового файла, представляя его в виде списка. Если необходимо прочитать большее число столбцов, то параметр форььае должен быть представлен списком, в котором для каждого столбца указывается формат чтения его данных.
В этом случае команда представляет данные в виде списка списков, каждый подсписок которого содержит данные одной строки файла. Задать количество читаемых столбцов можно и необязательным параметром число стохсцоа, но при этом в параметре формат можно указать только один формат чтения, применяемый ко всем данным, т.
е. список форматов в параметре фор ае и задаваемое третьим параметром число столбцов несовместимы. В примере 5.24 читаются данные, записанные в файл в примере 5.23, и полученный список списков преобразуется в матрицу. Перед чтением установ- ЛЕНО ЗНаЧЕНИЕ ПараМЕтра Сьчь Еа раВНЫМ 4. > огягса:=4: > в:сееаооаса("с1:ОсетрОгаье.схс",[г1оас,г1оас)); В:= 1[ 1.0, О.),[ 1.1, 4 012 ),[ 1.2, 1.987), [ 1.3, 2 076)) > С:=соатетС(в,атсау); 1.0 О. 1.1 4.012 1.2 !.987 1.3 2.076 Кроме этих двух достаточно удобных и простых команд взаимодействия с внешними файлами, язык Мар!е предлагает большой набор команд ввода/вывода, которые по своей функциональности и своему синтаксису близки к соответствующим функциям ввода/вывода языка программирования С.
Прежде чем читать данные из файла или, наоборот, записывать в него, его следует открыть. Все команды Мар!е чтения/записи автоматически открывают файл при задании его имени в первом параметре. Однако можно соз- Глава 5. Основы программирования в Марlе дать дескриптор файла и использовать его для ссылки на соответствуюший файл в командах ввода/вывода. Для этого необходимо открыть файл командой гпрепы или прелы и присвоить ее результат переменной, имя которой и будет дескриптором соответствующего файла. Язык Мар!е полдерживает как бу4еризованный, так и небу4ерозованный ввод/вывод в файл.
Если при операциях ввода/вывода данные сначала накапливаются в специальном буфере (некоторой области памяти), а затем, когда буфер полностью заполняется или файл закрывается соответствующей командой, все данные за одну операцию записываются в файл„а при чтении данные из файла сначала передаются в буфер, а потом уже читаются из него, то такой файл называется буферизованным, и Мар1е рассматривает его как файл типа зтвкйн.
Если данные при операциях чтения/записи непосредственно читаются/записываются в файл, минуя промежуточный накопитель- буфер, то говорят, что осушествляется небуферизованный ввод/вывод, файл называется пебуферизованным, и для Мар!е он имеет тип вли. Буферизованные операции ввода/вывода выполняются быстрее небуферизованных, так как за одну операцию пересылается большее число данных. Команда гпреп11 открывает буферизованные файлы и имеет синтаксис: гсреп1иия файла, режим достУпа 1, тип файла!) Имя открываемого файла задается строкой и должно удовлетворять принятому в операционной системе именованию файлов.
ПараМЕтр режи ~ дсстУпа МОжЕт ПрИНИМатЬ ОДНО ИЗ СЛЕдуЮщИХ ЗНаЧЕНИй вяло, ввттк или йргкно, которые, соответственно, определяют, что файл открывается только для чтения, для чтения и записи данных с начала файла или в режиме чтения и добавления новых данных в конец сушествуюших. Необязательным параметром тип файла задается текстовый (тахт) или двоичный (втпйву) файл.