Дописать в файл матлаб

Обновлено: 04.07.2024

Загружает данные в массив A из файла, обозначенного именем файла .

Загружает данные из системного буфера обмена, а не из файла.

A = importdata (___, delimiterIn)

Интерпретирует delimiterIn как разделитель столбцов в файле ASCII, имени файла или данных буфера обмена. Вы можете использовать delimiterIn с любым из входных аргументов в приведенных выше синтаксисах.

A = importdata (___, delimiterIn, headerlinesIn)

Загружает данные из файла ASCII, имени файла или буфера обмена, считывая числовые данные, начиная со строки headerlinesIn + 1 .

[A, delimiterOut, headerlinesOut] = importdata (___)

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

A = importdata (имя файла)

Загружает данные в массив A из файла, обозначенного именем файла .

Загружает данные из системного буфера обмена, а не из файла.

A = importdata (___, delimiterIn)

Интерпретирует delimiterIn как разделитель столбцов в файле ASCII, имени файла или данных буфера обмена. Вы можете использовать delimiterIn с любым из входных аргументов в приведенных выше синтаксисах.

A = importdata (___, delimiterIn, headerlinesIn)

Загружает данные из файла ASCII, имени файла или буфера обмена, считывая числовые данные, начиная со строки headerlinesIn + 1 .

[A, delimiterOut, headerlinesOut] = importdata (___)

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

filename = 'smile.jpg' ; A = importdata ( filename ); image ( A );

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

Импорт файлов Imange

Пример 2

В этом примере мы импортируем текстовый файл и указываем разделитель и заголовок столбца. Давайте создадим ASCII-файл, разделенный пробелами, с заголовками столбцов с именем weeklydata.txt .

Пример 3

В этом примере давайте импортируем данные из буфера обмена.

Математика проста

Низкоуровневый файловый ввод / вывод

Функция importdata является высокоуровневой функцией. Низкоуровневые функции ввода / вывода файлов в MATLAB позволяют максимально контролировать чтение или запись данных в файл. Однако эти функции нуждаются в более подробной информации о вашем файле для эффективной работы.

MATLAB предоставляет следующие функции для операций чтения и записи на уровне байтов или символов:

функция Описание
fclose Закройте один или все открытые файлы
feof Тест на конец файла
FERROR Информация об ошибках файлового ввода-вывода
fgetl Чтение строки из файла, удаление символов новой строки
fgets Читать строку из файла, сохраняя символы новой строки
Еореп Откройте файл или получите информацию об открытых файлах
fprintf Записать данные в текстовый файл
Fread Чтение данных из двоичного файла
frewind Переместить индикатор положения файла в начало открытого файла
fscanf Читать данные из текстового файла
FSEEK Переместить в указанную позицию в файле
ftell Положение в открытом файле
FWRITE Записать данные в двоичный файл

Импорт текстовых файлов данных с низкоуровневым вводом / выводом

Функция fscanf читает отформатированные данные в текстовом или ASCII-файле.

Функции fgetl и fgets читают по одной строке файла за раз, где символ новой строки разделяет каждую строку.

Функция fread считывает поток данных на уровне байтов или битов.

Функция fscanf читает отформатированные данные в текстовом или ASCII-файле.

Функции fgetl и fgets читают по одной строке файла за раз, где символ новой строки разделяет каждую строку.

Функция fread считывает поток данных на уровне байтов или битов.

пример

У нас есть текстовый файл данных «myfile.txt», сохраненный в нашем рабочем каталоге. Файл хранит данные об осадках за три месяца; Июнь, июль и август за 2012 год.

Данные в myfile.txt содержат повторные наборы измерений времени, месяца и количества осадков в пяти местах. Данные заголовка хранят количество месяцев M; таким образом, у нас есть M наборов измерений.

Откройте файл с помощью функции fopen и получите идентификатор файла.

Опишите данные в файле с помощью спецификаторов формата , таких как « % s » для строки, « % d » для целого числа или « % f » для числа с плавающей запятой.

По умолчанию fscanf считывает данные в соответствии с нашим описанием формата, пока не найдет совпадения для данных или не достигнет конца файла. Здесь мы будем использовать цикл для чтения 3 наборов данных и каждый раз будем читать 7 строк и 5 столбцов.

Откройте файл с помощью функции fopen и получите идентификатор файла.

Опишите данные в файле с помощью спецификаторов формата , таких как « % s » для строки, « % d » для целого числа или « % f » для числа с плавающей запятой.

По умолчанию fscanf считывает данные в соответствии с нашим описанием формата, пока не найдет совпадения для данных или не достигнет конца файла. Здесь мы будем использовать цикл для чтения 3 наборов данных и каждый раз будем читать 7 строк и 5 столбцов.

[Matlab] Операции с файлами в Matlab: fopen, fseek, fread, fclose и т. Д.

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

1. Открытие и закрытие файла

1) Откройте файл
Перед чтением и записью файла необходимо использовать функцию fopen, чтобы открыть или создать файл, и указать режим работы для файла. Формат вызова функции fopen:
fid = fopen (имя файла, «открытый метод»)
Примечание: fid используется для хранения значения дескриптора файла. Если возвращаемое значение дескриптора больше 0, файл открывается успешно. В имени файла используется строка символов, чтобы указать файл данных, который нужно открыть. Распространенные способы открытия следующие:
 ‘r’: откройте файл в режиме только для чтения (режим по умолчанию), файл должен уже существовать.
 ‘r +’: откройте файл в режиме чтения-записи, после открытия сначала прочтите, а затем запишите. Файл должен уже существовать.
 ‘w’: записывать данные после открытия. Файл обновляется, если он уже существует; если он не существует, он создается.
 ‘w +’: откройте файл в режиме чтения-записи. Сначала читайте, потом пишите. Файл обновляется, если он уже существует; если он не существует, он создается.
 ‘a’: добавить данные в конец открытого файла. Если файл не существует, он создается.
 ‘a +’: после открытия файла сначала считайте данные, а затем добавьте данные. Если файл не существует, он создается.
Кроме того, добавьте "t" после этих строк, например,'rt 'или'wt +', тогда файл будет открыт в текстовом режиме; если добавлен "b", то Открыть в двоичном формате, который также является методом открытия по умолчанию для функции fopen.

2) Закройте файл
Файл должен быть закрыт вовремя после операций чтения и записи, чтобы избежать потери данных. Используйте функцию fclose, чтобы закрыть файл. Формат вызова:
sta=fclose(fid)
Описание: эта функция закрывает файл, представленный fid. sta представляет собой код возврата операции закрытия файла. Если закрытие прошло успешно, возвращается 0, в противном случае - -1. Если вы хотите закрыть все открытые файлы, используйте fclose («все»).

2. Операции чтения и записи двоичных файлов.

1) Записывать двоичные файлы
Функция fwrite записывает элементы матрицы в файл в соответствии с указанной точностью данных. Формат звонка:
COUNT=fwrite(fid,A,precision)
Описание: COUNT возвращает количество записанных элементов данных (по умолчанию), fid - дескриптор файла, A используется для хранения данных, записанных в файл, precision представляет точность данных, обычно используется Точность данных включает: char, uchar, int, long, float, double и т. Д. По умолчанию точность данных равна uchar, то есть беззнаковому формату символов.
Пример 6.8 Сохранение двоичной матрицы в файл на диске.

a=[1 2 3 4 5 6 7 8 9];
fid = fopen (‘d: \ test.bin’, ‘wb’)% Откройте файл, записав двоичные данные
fid =
3%, значение которого больше 0, что означает успешное открытие

fwrite(fid,a,‘double’)
ans =
9% означает, что записано 9 данных.

fclose(fid)
ans =
0% означает, что выключение прошло успешно.

2) Читать двоичные файлы
Функция fread может считывать данные двоичного файла и сохранять их в матрице. Формат звонка:
[A,COUNT]=fread(fid,size,precision)
Описание: где A - матрица, используемая для хранения считанных данных, COUNT - количество возвращенных элементов данных, fid - дескриптор файла, а размер является необязательным. Если не выбран, Прочитать все содержимое файла; если этот параметр выбран, его значение может быть следующими: N (читать N элементов в вектор-столбец), inf (читать весь файл), [M, N] (читать данные в M × N Данные хранятся в столбцах). Precision используется для контроля точности записываемых данных, и его форма такая же, как у функции fwrite.

3. Операции чтения и записи текстовых файлов.
1) Прочитать текстовый файл
Функция fscanf может считывать содержимое текстового файла и сохранять его в матрице в соответствии с указанным форматом. Формат звонка:
[A,COUNT]=fscanf(fid,format,size)
Описание: A используется для хранения считанных данных, COUNT возвращает количество прочитанных элементов данных, fid - это дескриптор файла, формат используется для управления форматом считанных данных и% В сочетании с символами формата распространенными символами формата являются: d (целое число), f (с плавающей точкой), s (строка), c (символ) и т. Д. Вы также можете вставить дополнительные символы между% и символами формата. Спецификатор формата, например описание ширины данных. Размер не является обязательным, он определяет порядок данных в матрице A. Он может принимать следующие значения: N (чтение N элементов в вектор-столбец), inf (чтение всего файла), [M, N] (чтение данных в В матрице M × N данные хранятся в столбцах).

Использование fscanf в Matlab выглядит следующим образом:
A=fscanf(fid,format)
[A, count]=fscanf(fid,format,size)
[A, count]=fscanf(fid,format,size)

Лично наиболее часто используемая форма такова:
data = fscanf(fid,format,size);
, где данные - это массив прочитанного содержимого, а его размер определяется размером. size - вектор [mn], m - строка, n - столбец (обратите внимание, что здесь порядок чтения - сначала столбец, если вы не понимаете, вы можете увидеть пример ниже), если n - inf, это означает чтение до конца файла. . fid - это возвращаемое значение файла, открытого fopen, а format - это параметр форматирования (например, printf, scanf).

Приведи небольшой пример:
Путь + имя файла: d: \ moon.txt
Содержание: 13,1,3.4

Теперь, чтобы прочитать данные из moon.txt в массиве, вы можете использовать следующий метод:
fid=fopen(‘d:\moon.txt’);
data = fscanf (fid, ’% f,% f,% f’, [3, inf]);% используйте здесь одинарные кавычки
fclose(fid);

На данный момент данные в данных выглядят следующим образом: (3 строки и 4 столбца, элементы MATLAB расположены в порядке столбцов)

Обычно нам может потребоваться ссылка на определенную строку или определенный столбец в массиве, чтобы нарисовать изображение, метод - данные (m, :) или данные (:, n), то есть получить m-ю строку или n-й столбец массива данных.

2) Напишите текстовый файл
Функция fprintf может записывать данные в текстовый файл в указанном формате. Формат звонка:
fprintf(fid,format,A)
Описание: fid - это дескриптор файла, который указывает файл, в который будет выполняться запись. format - это символ формата, используемый для управления форматом записываемых данных, который аналогичен функции fscanf. A используется для хранения данных. матрица.
Пример 6.9. Создайте символьную матрицу и сохраните ее на диск, затем считайте и назначьте другой матрице.

matlab читает текстовый файл
fid=fopen(‘fx.txt’,‘r’);
% получить номер файла
[f,count]=fscanf(fid,’%f %f’,[12,90]);
% Прочитать данные файла номер 1 в f. Где f - матрица [12 90]
% Здесь ’% f% f’ представляет формат чтения данных, которые считываются как исходный тип данных.
fclose(fid);
% Закрыть файл

Кроме того, некоторые файлы txt можно открывать с помощью load
Предложение
f=load('fx.txt)
Я лично считаю, что первый способ лучше. Потому что иногда, особенно когда в одной строке fx.txt содержится несколько данных, использование load более проблематично.

4. Расположение файла данных
MATLAB предоставляет функции fseek и ftell, связанные с операциями позиционирования файлов. Функция fseek используется для определения местоположения указателя позиции файла, и ее формат вызова:
status=fseek(fid, offset, origin)
, где fid - дескриптор файла, смещение представляет количество байтов, перемещаемых указателем позиции, а значения OFFSET интерпретируются следующим образом:

0 Move toward the end of the file.
= 0 Do not change position.
< 0 Move toward the beginning of the file.
origin представляет исходную позицию перемещения указателя позиции, значения ORIGIN интерпретируются следующим образом:
‘bof’ or -1 Beginning of file
‘cof’ or 0 Current position in file
‘eof’ or 1 End of file。
Если позиционирование выполнено успешно, возвращаемое значение статуса - 0, в противном случае возвращаемое значение - –1.

Функция ftell возвращает текущую позицию указателя файла, и ее формат вызова:
position=ftell (fid)
Возвращаемое значение - это количество байтов от начала файла до текущей позиции указателя. Если возвращаемое значение равно –1, это означает, что текущая позиция файла не может быть получена.
Пример:
FID=fopen(‘sw.m’,‘r’)
fseek(FID,10,-1)
ans =
0

ftell(FID)
ans =
2180
Указатель файла можно переместить за конец текущего файла, но не перед его началом; когда указатель перемещается за конец файла, если файл закрыт, размер файла автоматически увеличивается до размера файла. Размер, указанный указателем, позволяет легко создать большой файл с помощью этого метода, конечно, содержимое нового добавленного файла является случайным.

[Приложение: Matlab читает исходный код файлов формата grd]
clc;
clear all;
close all;
fid=fopen([‘C:\Zhenghui_Code\testDLL\testForDLL\kms04ssh-egm96u.grd’],‘r’);

head = fread (fid, 4, ‘uint8 => char’) ’;% Прочтите заголовок файла DSAA
fscanf(fid,’\n’);

nx = fscanf (fid, ’% d’, 1);% прочитано количество строк данных сетки nnx, количество столбцов nnz
fp = fseek (fid, 1,0);% 1 означает, что указатель прочитанного файла сдвигается назад на 1 бит, а 0 означает, что указатель перемещается относительно текущей позиции
ny=fscanf(fid,’%d’,1);
fscanf(fid,’\n’);

xmin = fscanf (fid, ’% f’, 1);% считывает минимальное и максимальное значения x
fseek (fid, 4,1);% 4 означает, что указатель прочитанного файла сдвинут назад на 4 бита, 1 означает, что ссылочная позиция перемещения указателя является концом файла
xmax=fscanf(fid,’%f’,1);
fscanf(fid,’\n’);

ymin = fscanf (fid, ’% f’, 1);% считывает минимальное и максимальное значения y
fseek(fid,4,1);
ymax=fscanf(fid,’%f’,1);
fscanf(fid,’\n’);

zmin = fscanf (fid, ’% f’, 1);% считывает минимальное и максимальное значения z
fseek(fid,4,1);
zmax=fscanf(fid,’%f’,1);
fscanf(fid,’\n’);

for i = 1: ny% Обратите внимание, что Matlab хранит данные в порядке столбцов, сначала столбец 1, затем столбец 2, а затем последний столбец.
for m=1:nx
vp(i,m)=fscanf(fid,’%f’,1);
fseek(fid,4,1);
end
fscanf(fid,’\n’);
end

10. Чтение и запись файлов данных.

Ранее были рассмотрены MAT-файлы, в которых сохраняются переменные из рабочей области системы MATLAB. Также были рассмотрены M-файлы, хранящие текст M-функций. Теперь рассмотрим файлы произвольного формата, в которых M-функции могут записывать, а затем читать собственные данные.

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

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

fid = fopen( 'имя-файла', 'флаг' )

где имя файла может предваряться полным путём к нему ( иначе файл должен располагаться в текущем каталоге MATLABа ). Второй параметр этой функции - так называемый флаг открытия файла, говорит о способе дальнейшей работы с файлом:

'rb' - только для чтения

'wb' - только для записи ( предыдущее содержимое теряется )

Вторая буква в этих примерах говорит о бинарном характере файлов. Возможен ещё флаг, разрешающий как чтение, так и запись файлов одновременно ( 'r+' ), но мы его здесь использовать не будем.

Функция fopen возвращает числовой идентификатор открытого файла, который надо использовать в качестве параметра для функций чтения и записи в этот файл. Если операция открытия файла не удалась ( это возможно как по причине отсутствия файла, так и по причине неправильного указания пути к нему на диске ), то функция fopen возвращает -1.

Всегда следует проверять возврат функции fopen:

fid = fopen( 'имя_файла', 'флаг' );

if( fid == -1 )

error( 'File is not opened' )

end

После того, как файл больше не требуется, его следует закрыть функцией fclose:

fclose( fid )

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

fwrite( fid, A, 'precision' )

где fid - файловый идентификатор, возвращаемый функцией fopen; A - вектор или матрица, чьи элементы подлежат записи в файл; строка 'precision' говорит о размере памяти, отводимой под вещественные числа. Это 8 байт или 64 бита, так что строка должна иметь вид 'float64'.

В следующем фрагменте кода создаются вектор-столбец a и матрица B размером 2x3, которые затем записываются в файл с именем 'dataTest.gqw' ( здесь расширение имени файла выбрано произвольно так, чтобы не совпасть с известными расширениями ):

a = [ 1; 2; 3 ]; B = [ 4 5 6; 7 8 9 ];

fid1 = fopen( 'dataTest.gqw', 'wb' );

fwrite( fid1, a, 'float64' );

fwrite( fid1, B, 'float64' );

fclose( fid1 );

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

fid1 = fopen( 'dataTest.gqw', 'rb' );

[ a , count ] = fread( fid1, [1 3], 'float64' );

[ B , count ] = fread( fid1, [2 3], 'float64' );

fclose( fid1 );

Легко убедиться, что прочитанные значения совпадают с ранее записанными. При этом число count равно числу реально прочитанных вещественных чисел. При чтении вектора a это число будет равно 3, а при чтении матрицы B - будет равно 6.

B =

4 5 6

7 8 9

count =

6

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

Во-вторых, при чтении какого-либо данного внутренний указатель текущей позиции ( подлежащей чтению ) файла продвигается на число прочитанных байт информации. В какой-то момент он может выйти на границу файла, и читать станет нечего. Такую ситуацию нужно отслеживать, чтобы не допускать ошибочных действий. Мы же в данном примере положились на наше хорошее знание устройства файла, поэтому мы вначале прочитали вектор, а затем - матрицу ( в другом порядке это делать нельзя ), указав при этом их правильные размеры.

Для отслеживания позиции файлового указателя и работы с ним служат функции feof ( служит для индикации конца файла ), fseek ( устанавливает файловый указатель ), ftell (позволяет узнать значение текущего файлового указателя), frewind ( устанавливает файловый указатель на началдо файла ). Все эти функции имеют прозрачный смысл, поэтому мы их подробно не будем рассматривать. О них всегда можно разузнать в справочной системе MATLABа.

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

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

Вот пример такой работы:

str1 = 'Hello'; str2 = 'World!';

fid1 = fopen( 'strTest.gqw', 'wb' );

fwrite( fid1, str1, 'int16' );

fwrite( fid1, str2, 'int16' );

fclose( fid1 );

В результате будет создан файл strTest.gqw, содержащий в бинарном формате содержимое двух строковых переменных. Их можно прочесть с помощью функции fread:

fid1 = fopen( 'strTest.gqw', 'rb' );

[ a , count ] = fread( fid1, 5, 'int16' );

[ b , count ] = fread( fid1, 6, 'int16' );

str1 = char( a' ); str2 = char( b' );

fclose( fid1 );

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

Для работы со строковыми данными больше подходят текстовые файлы. Их открывают с флагами 'r' или 'w' ( букву b, что означает binary - двоичный, теперь добавлять не надо ). Писать и читать строковые переменные в эти файлы удобно с помощью функций fprintf и fscanf. Вот пример записи в файл:

str1 = 'Hello'; str2 = 'World!';

fid1 = fopen( 'strTest2.txt', 'w' );

fprintf( fid1, '%s\r\n%s\r\n', str1, str2 );

fclose( fid1 );

Одним вызовом функции fprintf удаётся записать сразу две строковые ( символьные ) переменные str1 и str2. Информацию об этом нужно располагать во втором параметре функции fprint в виде символов формата %s, означающих запись строк. Каждый из этих символов нужно завершать парой специальных символов \r\n, означающих "возврат каретки и перевод строки". Таким образом, каждая из этих двух строк при чтении файла любым стандартным текстовым редактором ( например, редактором Notepad ) будет показана на отдельной строке:


Текстовые файлы, в отличие от бинарных, можно читать с меньшими предосторожностями и без лишней работы и детальных сведений о записанных значениях строковых переменных ( раньше мы, например, указывали длину строк ). Теперь, когда мы записали две строковые переменные с их разделением спецсимволами \r\n, мы может читать строки без указания их длины. Для этого следует воспользоваться функцией fgetl ( взять новую строку ):

fid1 = fopen( 'strTest2.txt', 'r' );

str1 = fgetl( fid1 ); s

tr2 = fgetl( fid1 );

fclose( fid1 );

Легко убедиться, что прочитанные значения совпадают с ранее записанными в этот текстовый файл:


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

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

Для загрузки данных из файла,расположенного на локальном диске в рабочую средуMATLAB, используются следующие операторы:load, freadиfscanf. Для сохранения данных из рабочей среды MATLAB в файл на локальном диске предусмотрено использование следующих операторов: save, fwrite, fprintf.

В самом простом случае для сохранения и последующей загрузки каких-либо данных в среде MATLAB предусмотрены следующие функции, соответственно: save и load, имеющие следующий синтаксис:

save<имя файла><имена переменных>

load<имя файла><имена переменных>

Функция save позволяет сохранять произвольные переменные, используемые в программе в файл, который будет по умолчанию располагаться в рабочем каталоге (обычно поддиректория work) и иметь расширение mat. Соответственно функция loadпозволяет загрузить из указанного mat-файла ранее сохраненные переменные.

Недостатком функций save и load является то, что они работают с определенными форматами файлов (обычно mat-файлы) и не позволяют загружать или сохранять данные в других форматах. Между тем бывает необходимость загружать информацию, например, из бинарных файлов, созданных другими программными продуктами для дальнейшей обработки результатов в среде MATLAB. С этой целью в среде MATLAB предусмотрены следующие функции

fwrite(<идентификатор файла>, <переменная>, <тип данных>)

<переменная>=fread(<идентификатор файла>, <размер>, <точность>)

где: <идентификатор файла>– это указатель на файл, с которым предполагается работать. Для того, чтобы получить идентификатор файла, используется функция fopen, имеющая следующий синтаксис:

<идентификатор файла>=fopen(<имя файла>,<режим работы>)

где: параметр <режим работы> может принимать значения, приведенные в таблице 1.

В том случае, если функция fopen() по каким-либо причинам не может корректно открыть файл, то она возвращает значение –1. После выполнения всех файловых операций файл должен быть закрыт с помощью функции fcloseследующей структуры:

fclose(<идентификатор файла>)

С помощью команды fclose(all)можно закрыть сразу все открытые файлы, кроме стандартных системных файлов.

Пример использования функций работы с файлами:

A=[1 2 3 4 5];

fid=fopen('my_file.dat', 'wb');% открытие файла на запись

fwrite(fid, A, 'double');% запись матрицы А в файл

fclose(fid);% закрытие файла
B=fread(fid, 5, 'double'); % чтение 5 значений в формате double
disp(B); % отображение на экране
fclose(fid); % закрытие файла

В результате выполнения данных операций в рабочем каталоге MATLABбудет создан файл my_file.dat размером 40 байт, в котором будут содержаться 5 значений типа double, записанных в виде последовательности байт (по 8 байт на каждое значение). Функция fread() считывает последовательно сохраненные байты и автоматически преобразовывает их к типу double, т.е. каждые 8 байт интерпретируются как одно значение типа double.

В приведенном примере в явном виде указывалось число элементов для считывания из файла. Однако, часто общее количество элементов бывает неизвестным, либо изменяется в процессе работы программы. В этом случае необходимо считывать данные из файла до тех пор, пока не будет достигнут его конец. В MATLAB существует функция для проверки достижения конца файла,которая возвращает 1 при достижении конца файла и 0 в других случаях и имеет следующий синтаксис:

feof(<идентификатор файла>)

Таблица 1 - Режимы работы с файлами в среде MATLAB при использовании функции fopen

Значение параметра <режим работы> Описание параметра
'r' чтение
'w' запись (стирает предыдущее содержимое файла)
'a' добавление (создает файл, если его нет)
'r+' чтение и запись (не создает файл, если его нет)
'w+' чтение и запись (очищает прежнее содержимое или создает файл, если его нет)
'a+' чтение и добавление (создает файл, если его нет)
'b' дополнительный параметр, означающий работу с бинарными файлами, например, ‘wb’, ‘rb’ ‘rb+’, ‘ab’

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




Функция чтения fscanfимеет следующий синтаксис:

[value, count]=fscanf(fid, format, size)

где: value – результат считывания данных из файла; count – число прочитанных (записанных) данных; fid – указатель на файл; format – формат чтения (записи) данных; size – максимальное число считываемых данных

Функция записиfprintfимеет следующий синтаксис:

count=fprintf(fid, format, a,b. )

где:a,b,… – переменные для записи в файл.

Таблица 2- Список основных спецификаторов параметра formatдля функций fscanf() и fprintf()

Спецификатор Описание
%d целочисленные значения
%f вещественные значения
%s строковые данные
%c символьные данные
%u беззнаковые целые значения

В форматной строке могут бытьтакже использованы различные управляющие символы:

\r – возврат каретки;

\t – горизонтальная табуляция;

\n – переход на новую строку

С помощью функции fprintf() можно осуществлять запись разнородных данных в файл в требуемом формате, в том числе и строковых переменных, что позволяет размещать в файле различные текстовые надписи.

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