В системе matlab файлы с расширением c предназначены для хранения

Обновлено: 03.07.2024

[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

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