matlab_fileWiterandRead
MATLAB Write and Read Command
| 文件格式 | 文件类型 | 写入函数 | 读取函数 |
|---|---|---|---|
| MAT文件 | .mat | save | load |
| 文本文件 | .txt/.dat | fprintf | fscanf/textscan/textread/fgetl |
| 表格文件 | .xlsx | writematrix/writemcell/writetable | readmatrix/readtable/readcell |
I. MAT文件
保存/读取所有变量
save('filename.mat'); % 保存当前工作区所有变量
load('filename.mat'); % 记载文件中所有变量
保存/读取指定单一变量
save('filename.mat', 'x', 'y'); % 仅保存变量x和y
load('filename.mat', 'x'); % 记载文件中变量x
II. 文本文件
II.1 写入文件
1)fprintf
fid = fopen('filename.txt', 'w');
fprintf(fid, "%03d, %02x, %.5f", intdata, stringdata. floatdata);
fclose(fid);
II.2 读取文件
II.2.1 整体读取
1)fscanf
特点:
- 一次读取整个文件,速度快
- 支持格式化说明符%d%s%c%x%h
- 输出为向量
fid = fopen('filename.txt', 'r');
data1= fscanf(fid, '%x');
data2= fscanf(fid, '%d %s %f'); % 整数、字符串、浮点数格式
fclose(fid);
2)textscan
特点:
- 需要文件句柄
- 一次读取整个文件
- 支持格式化说明符%d%s%c%x%h和非格式化
- 与fgetl配合使用实现逐行读取,textscan处理字符串分割
fid = fopen('filename.txt', 'r');
celldata = textscan(fid, "%s %s);
fclose(fid);
data_I = hex2dec(celldata{1});
data_Q = hex2dec(celldata{2});
fid = fopen('filename.txt', 'r');
while ~feof(fid)
str_orig = fgetl(fid); % 逐行以字符串形式读取
data = textscan(str_orig, '%d %s %f'); % 按指定格式解析字符串
end
fclose(fid);
3)textread
特点:
- 无需文件句柄,直接操作文件名
- 一次读取整个文件,速度快
- 支持格式化说明符%d%s%c%x%h
- 输出为向量
data1= textread('filename1.txt', '%x');
[A B C]= textread('filename2.txt', '%d %s %f'); % 整数、字符串、浮点数格式
data3= textread('filename3.txt', '%s');
II.2.2 逐行读取
1)fgetl
特点:
- 只能用来逐行读取数据,自行解析每行内容
- 每行读取原始字符串
fid = fopen('filename.txt', 'r');
while ~feof(fid)
str_orig = fgetl(fid); % 逐行以字符串形式读取
% 按需求对字符串进行分割
str = strsplit(str_orig, {' ' ','}); % 举例对字符串以' '和','分割
data = hexdec(cell2mat(str(6))); % 取出需要的子字符串
end
fclose(fid);
III. 表格文件
III.1 写入表格
1)writematrix(写入数值矩阵)
A = rand(5); % 生成一个随机数数值矩阵
writematrix(A, 'data.xlsx'); % 保存为Excel文件
2)writetable(写入表格数据)
T = table([1; 2; 3], {'John'; 'Alice'; 'Bob'}, [45.6; 32.5; 28.7], ...
'VariableNames', {'ID', 'Name', 'Score'});
writetable(T, 'output.xlsx');
writetable(T, 'output.xlsx', 'Sheet', 'NewSheet'); % 写入指定工作表
3)writecell(写入单元格数组)
C = {'ID', 'Name', 'Score'; 1, 'John', 45.6; 2, 'Alice', 32.5; 3, 'Bob', 28.7};
writecell(C, 'output.xlsx');
III.2 读取表格
1)readtable(读取为数值矩阵)
适用于纯数值数据
T = readmatrix('data.xlsx');
2)readtable(读取为表格)
适用于结构化数据
T = readtable('data.xlsx');
T = readtable('data.xlsx', 'Sheet', 'Sheet2'); % 读取指定工作表
3)readcell(读取为单元格数组)
适用于文件中包含不同数据类型
T = readcell('data.xlsx');
浙公网安备 33010602011771号