Распознанный текст, спецсимволы и формулы могут содержать ошибки, поэтому с корректным вариантом рекомендуем ознакомиться на отсканированных изображениях учебника выше Также, советуем воспользоваться поиском по сайту, мы уверены, что вы сможете найти больше информации по нужной Вам тематике ДЛЯ СТУДЕНТОВ И ШКОЛЬНИКОВ ЕСТЬ
ZADANIA.TO
5.2. Функции fwrite и fread
Недостатком рассмотренных функций save и load является то,
что они работают с определенными форматами файлов (обычно mat-файлы) и не
позволяют загружать или сохранять данные в других форматах. Между тем бывает
необходимость загружать информацию, например, из бинарных файлов, созданных
другими программными продуктами для дальнейшей обработки результатов в MatLab. С этой целью
были разработаны функции
и
Здесь
<идентификатор файла> - это указатель на файл, с которым предполагается
работать. Чтобы получить идентификатор, используется функция
где параметр <режим работы> может принимать значения, приведенные в табл. 5.1. Таблица 5.1. Режимы работы с файлами в MatLab
Если функция fopen() по каким-либо
причинам не может корректно открыть файл, то она возвращает значение -1. Ниже
представлен фрагмент программы записи и считывания данных из бинарного файла:
В результате работы данной программы в рабочем каталоге будет создан файл my_file.dat размером 40 байт, в котором будут содержаться 5 значений типа double, записанных в виде последовательности байт (по 8 байт на каждое значение). Функция fread() считывает последовательно сохраненные байты и автоматически преобразовывает их к типу double, т.е. каждые 8 байт интерпретируются как одно значение типа double. В приведенном примере явно указывалось
число элементов (пять) для считывания из файла. Однако часто общее количество
элементов бывает наперед неизвестным, либо оно меняется в процессе работы
программы. В этом случае было бы лучше считывать данные из файла до тех пор,
пока не будет достигнут его конец. В MatLab существует
функция для проверки достижения конца файла
которая
возвращает 1 при достижении конца файла и 0 в других случаях. Перепишем
программу для считывания произвольного числа элементов типа double из входного
файла.
В данной программе динамически
формируется вектор-строка по мере считывания элементов из входного файла. MatLab автоматически
увеличивает размерность векторов, если индекс следующего элемента на 1 больше
максимального. Однако на такую процедуру тратится много машинного времени и
программа начинает работать заметно медленнее, чем если бы размерность вектора B с самого начала
была определена равным 5 элементам, например, так
Следует также отметить, что функция fread() записана с двумя выходными параметрами V и N. Первый параметр содержит значение считанного элемента, а второй – число считанных элементов. В данном случае значение N будет равно 1 каждый раз при корректном считывании информации из файла, и 0 при считывании служебного символа EOF, означающий конец файла. Приведенная ниже проверка позволяет корректно сформировать вектор значений B. С помощью функций fwrite() и fread() можно
сохранять и строковые данные. Например, пусть дана строка
которую
требуется сохранить в файл. В этом случае функция fwrite() будет иметь
следующую запись:
Здесь
используется тип int16, т.к. при работе с русскими буквами система MatLab использует
двухбайтовое представление каждого символа. Ниже представлена программа записи
и чтения строковых данных, используя функции fwrite() и fread():
Результат
выполнения программы будет иметь вид
|
1 |
Оглавление
|