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

特点:

  1. 一次读取整个文件,速度快
  2. 支持格式化说明符%d%s%c%x%h
  3. 输出为向量
fid = fopen('filename.txt', 'r');
data1= fscanf(fid, '%x'); 
data2= fscanf(fid, '%d %s %f');  % 整数、字符串、浮点数格式
fclose(fid);
2)textscan

特点:

  1. 需要文件句柄
  2. 一次读取整个文件
  3. 支持格式化说明符%d%s%c%x%h和非格式化
  4. 与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

特点:

  1. 无需文件句柄,直接操作文件名
  2. 一次读取整个文件,速度快
  3. 支持格式化说明符%d%s%c%x%h
  4. 输出为向量
data1= textread('filename1.txt', '%x'); 
[A B C]= textread('filename2.txt', '%d %s %f');  % 整数、字符串、浮点数格式
data3= textread('filename3.txt', '%s'); 

II.2.2 逐行读取

1)fgetl

特点:

  1. 只能用来逐行读取数据,自行解析每行内容
  2. 每行读取原始字符串
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');
posted @ 2024-11-28 15:05  茶山刘  阅读(6)  评论(0)    收藏  举报