Функции для записи матриц в файл и чтения матриц из файла 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Функции для записи матриц в файл и чтения матриц из файла



Функция dlmread считывает числовые данные из текстового файла в матрицу А.

Функция dlmwrite записывает матрицу в текстовый файл.

Команда dlmwrite('dlm1.txt',A) записывает матрицу А в файл dlm. txt и ставит запятые после элементов матрицы.

Команда type('dlm1.txt') показывает содержимое текстового файла dlm. txt в окне Command Window.

Команда dlmwrite('dlm2.txt',A,'#') не только записывает матрицу А в файл, но и добавляет между элементами матрицы разделитель. Разделитель можно указать почти любой.

function[]=dlmwrite1()   

for i=1:3

for j=1:3

A(i,j)=input(strcat('A(',int2str(i),',',int2str(j),')='));

end

end

dlmwrite('dlm1.txt',A)

type('dlm1.txt')   

end

function Start_dlmwrite1()

dlmwrite1()

end

A(1,1)=1 A(1,2)=2 A(1,3)=3 A(2,1)=4 A(2,2)=5 A(2,3)=6 A(3,1)=7 A(3,2)=8 A(3,3)=9   1,2,3 4,5,6 7,8,9

Функция dlmwrite2 демонстрирует применение команды dlmwrite('dlm2.txt',A,'#'). В результате между числами (элементами матрицы А) при выводе на экран будет поставлен разделитель решетка #.

function[]=dlmwrite2()   

for i=1:3

   for j=1:3

A(i,j)=input(strcat('A(',int2str(i),',',int2str(j),')='));

   end

end

dlmwrite('dlm2.txt',A,'#')

type('dlm2.txt')   

end

function Start_dlmwrite2()

dlmwrite2()

end

 

A(1,1)=1 A(1,2)=2 A(1,3)=3 A(2,1)=4 A(2,2)=5 A(2,3)=6 A(3,1)=7 A(3,2)=8 A(3,3)=9   1#2#3 4#5#6 7#8#9

Команда dlmwrite('dlm3.txt',A,'#',2,2) записывает не всю матрицу, а начиная с указанной строки и столбца. На месте пропущенных элементов (строк и столбцов) остаются разделители.

Функция dlmwrite3 демонстрирует применение команды dlmwrite('dlm3.txt',A,'#',2,2). В результате матрица А имеет пустые две строки сначала (первую и вторую) и два пустых столбца. Таким образом, матрица фактически имеет пять строк и пять столбцов, но при этом введенные элементы расположены как массив «три на три».

function[]=dlmwrite3()   

for i=1:3

   for j=1:3

A(i,j)=input(strcat('A(',int2str(i),',',int2str(j),')='));

   end

end

dlmwrite('dlm3.txt',A,'#',2,2)

type('dlm3.txt')   

end

function Start_dlmwrite3()

dlmwrite3()   

end

 

A(1,1)=1

A(1,2)=2

A(1,3)=3

A(2,1)=4

A(2,2)=5

A(2,3)=6

A(3,1)=7

A(3,2)=8

A(3,3)=9

 

####

####

##1#2#3

##4#5#6

##7#8#9

A = 5 6 8 9

Команда A=dlmread('dlm2.txt','#',1,1) считывает матрицу из указанного текстового файла, начина с второй строки и второго столбца (указанные номера строки и столбца 1, 1 на самом деле означают 2 строку и 2 столбец, так как нумерация в этой команде идет с нуля). При этом команда предупреждена о наличии между считываемыми элементами разделителя # и не затрудняется из-за его наличия.

A =

1 2 3 0

4 5 6 0

7 8 9 0

1 4 9 0

16 25 36 0

49 64 81 0

Команда A=dlmread('exTextFile_3.txt') считывает матрицу квадратную, и если до квадратной не хватает, то добавляет строки или столбцы из нулей.

A =

1 2 3

4 5 6

7 8 9

Команда A=dlmread('dlm1.txt',',') считывает, зная о наличии разделителя между элементами матрицы.

A = 1 2 4 5

Команда A=dlmread('dlm1.txt',',',[0 0 1 1]) считывает, зная о разделителе, элементы начиная с 0-й строки и 0-го столбца и до 1-й строки и 1-го столбца при нумерации с нуля.

         

Рис.1.24 показывает содержимое текстовых файлов.

Рис.1.24 Текстовые файлы, созданные вышеописанными функциями.

Двоичные файлы

При открытии функцией fopen указывается режим: wb (аналогично wt для текстовых) и rb (вместо rt для текстовых) (Табл.1.3).

Чтение из двоичного файла выполняется [A n]=fread(f, n, type); где А матрица, n количество реально считанных в нее элементов.

uchar 1 байт Целое беззнак. uint16 2 Целое без знака
schar 1 Целое со знаком uint32 4 Целое без знака
int16 2 Целое со знаком uint64 8 Целое без знака
int32 4 Целое со знаком float32 4 Вещественное число
int64 8 Целое со знаком float64 8 Вещественное число

Таблица 1. 3. Размеры переменных различных типов

В правой части выражения, f идентификатор файла, n количество считываемых (если удастся столько считать) элементов, type указывает сколько байт в каждом считываемом элементе. Если параметр type (см. таблицу) не указан то по умолчанию программа будет считать что выбрано значение uchar. Если пропущено количество n считываемых элементов, то будет считывать до конца файла.

function[]=exFread() f=fopen('exFwrite1_1.dat','rb'); x=fread(f,1,'int32') A=fread(f,x,'float32') fclose(f); f=fopen('exFwrite1_2.dat','rb'); x=fread(f,1,'int32') A=fread(f, [2 2], 'float32') fclose(f); end

Текущая позиция указателя (сколько байт от начала файла) возвращается функцией ftell(f) где f идентификатор файла. Вернуть указатель в начало файла можно функцией frewind(f). Остальные перемещения указателя с помощью функции fseek(f,n,origin) где n перемещение (в байтах) относительно позиции origin (три варианта: ‘ bof ’ или -1 начало файла, ‘ eof ’ или 1 конец файла, ‘ cof ’ или 0 текущая позиция. Относительно текущей позиции вперед n>0, назад n<0. В остальных случаях n>0.)

Запись в двоичный файл осуществляется функцией

n=fwrite(f, A, type) где f идентификатор файла, A матрица которую записываем, type тип записываемых значений, n отчет о количестве реально записанных значений.

Аналогично чтение из файла.



Поделиться:


Последнее изменение этой страницы: 2021-03-09; просмотров: 131; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.15.156.140 (0.007 с.)