Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Урок 3 Смирнов.doc
Скачиваний:
13
Добавлен:
26.11.2019
Размер:
5.79 Mб
Скачать

Запись и чтение бинарных файлов

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

fwrite(<идентификатор_файла>. A. 'precision')

Здесь А — числовой вектор (или матрица), элементы которого необходимо запи­сать в файл, 'precision' — символьный параметр, указывающий, сколько памяти отводится под запись отдельного числа. В MATLAB для записи вещественных чисел, под которую отводится 8 байт (или 64 бита), используется тип doubl е. По­этому при записи таких данных в бинарный файл нужно указать в качестве пара­метра 'precision' текстовую строку 'float64‘.

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

Рассмотрим пример записи значений элементов вектора х размером 1x5 и квад­ратной матрицы у размером 3x2.

» X = 1:5

» х = 1 2 3 4 5

» у = [6 7; 8 9; 10 11]

у = 6 7

  1. 9

10 11

в бинарный файл tst_dat.bin:

F1=fopen('tst_dat.bin'.'wb');

fwrite(Fl.x.'float64'); fwrite(Fl.y.'float64');

fclose(Fl);

Теперь осуществим чтение данных из записанного файла. Для этого откроем файл с флагом rb и применим функцию fread, предназначенную для чтения информа­ции из бинарного файла. Обращение к ней осуществляется в такой форме:

[A.count] =freed(<идентификатор_файла>. [m.n].'precision')

Здесь А — имя числовой матрицы, элементы которой принимают считанные из файла значения, m — число строк этой матрицы, n — число ее столбцов, count — ко­личество действительно считанных элементов из файла данных, 'precision' — символьный параметр, указывающий, сколько памяти отводится под запись в мат­рице А отдельного числа. Для записи в MATLAB данных из бинарного файла следует указать в качестве параметра 'precision' текстовую строку 'float64'. Параметр <идентификатор_файла> является символьной строкой, содержащей имя бинарного файла, из которого считывается информация.

При считывании информации из бинарного файла нужно иметь в виду следую­щие особенности:

  • считывание начинается с того места бинарного файла, где находится указатель;

  • при первом считывании только что открытого файла данных указатель распо­ложен в самом начале бинарного файла, перед первым его элементом;

  • после очередного считывания с помощью функции fread указатель перемещает­ся по файлу данных и устанавливается после последнего считанного элемента.

Приведем несколько примеров. В записанном нами файле tst_dat.bin содержится 11чисел типа double. Сначала считаем его в единственный вектор длиной 15 эле­ментов:

» F2 » fopen('tst_dat.bin'.'rb');

» [Vl.cl] - fread(F2.[1.15],'float64')

» fclose(F2);

Получаем:

VI = 1 2 3 4 5 6 7 8 9 11 с1 = 11

Как видим, реально было считано 11 элементов. Порядок их расположения в за­писанном файле данных ясен из полученного вектора VI. Можно убедиться, что элементы исходной матрицы у были считаны при записи по столбцам.

Теперь считаем эти данные в вектор и в матрицу тех же размеров, которые были использованы при записи:

» F2 = fopen('tst_dat.bin'.'rb');

» [XI.с2] - fread(F2.[1.5].'float64')

» [Yl.c3] - fread(F2.[3.2].'float64’)

» fclose(F2);

XI = 1 2 3 4 5

c2 = 5

Y1 =

6 7

8 9

10 11

c3 = 6

Результат считывания полностью совпадает с исходными данными.

Наконец, попробуем считать матрицу у в матрицу Y2, имеющую заведомо боль­шие размеры (4x3):

» F2 » fopen(’tst_dat.bin'.'rb');

» [Х2.с4] - fread(F2.[1.5].,float64')

» [Y2.c5] = fread(F2,[4.3].'float64')

» fclose(F2);

X2 = 1 2 3 4 5

c4 = 5

Y2 =

6 9

8 11

10 0

7 0

с5 = 6

Р

ПРИМЕЧАНИЕ! Правильное считывание данных из бинарного файла возможно только при условии, что заранее известно, в каком формате записаны данные в этот файл.

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

Например, если считать данные в формате Float32, то получим следующее:

» F2 = fopen('tst_dat.bin',' rb');

» [Х2.С4] = fread(F2.[1.5],'float32')

» [Y2.c5] = fread(F2.[4.3]. 'f1oat32')

» fclose(F2);

X2 = 0 1.8750 0 2.0000 0

c4 = 5

Y2 =

c5 = 12

Такой результат ни в коей мере не отражает записанные исходные данные.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]