MATLAB 的数据导入与导出 - CuriousZero

时间:2024-02-15 20:20:00

MATLAB 的数据导入与导出

1 数据导入:

%% 高层次读取数据。 importdata 函数是一个高层次的函数
filename = \'weeklydata.txt\';
delimiterIn =\' \';   %delimiter: n. 定界符。将 delimiterIn 解释为 ASCII 文件、文件名或剪贴板数据中的列分隔符。
headerlinesIn = 1;  % 从 lineheaderlinesIn+1 开始读取数字数据。
A=importdata(filename,delimiterIn,headerlinesIn);
% 开始预览数据
for k =[1:7]
    disp(A.colheaders{1,k}) %展示每一列的题头
    disp(A.data(:,k)) %每一列的所有行
    disp(\'  \')
end

结果:

Matlab低级别的文件 I/O:
%% Matlab低级别的文件 I/O
filename = \'myfile.txt\';
% myfile.txt保存在工作目录中。此文件存放三个月的降雨资料: 2012年6月,7月和8月降雨量。
% myfile.txt中的数据在五个地方包含重复的时间,月份和降雨量测量。标题数据存储月数M; 所以有M个集合测量值。
rows = 7
cols = 5

%使用 fopen 函数打开文件并获得文件标识符。
fid = fopen(filename);

%读取文件头,找到 M (月份数)
% 使用格式说明符描述文件中的数据,例如字符串的%s,整数%d或浮点数%f。
% 要跳过文件中的文字,需将其包含在格式说明中。要跳过数据字段,在说明符中使用星号(*)
M=fscanf(fid,\'%*s %*s\n %*s %*s %*s %*s\n M=%d\',1); %要读取头文件,并返回单个的M值

%读取 each set of measurements

for n= 1:M
    % 默认情况下,fscanf会根据格式描述读取数据,直到找不到数据的匹配,或到达文件的末尾。
    % 这里使用for循环读取3组数据,每次读取7行和5列。
    % 在工作空间中创建一个名为mydata的结构来存储从文件读取的数据。
    % 这个结构有三个字段 - 时间,月份和雨天数组。
     mydata(n).time=fscanf(fid, \'%s\',1);
     mydata(n).month = fscanf(fid, \'%s\', 1);
     mydata(n).raindata=fscanf(fid,\'%f\',[rows,cols]);
     
end 
for n=1:M
    disp(mydata(n).time)
    disp(mydata(n).month)
    disp(mydata(n).raindata)
end

%关闭文件
fclose(fid);

结果:

 

 

 

2 数据导出:

使用 save 将工作区变量保存到文件中。

(1)save(filename) 将当前工作区中的所有变量保存在 MATLAB® 格式的二进制文件(MAT 文件)filename 中。如果 filename 已存在,save 会覆盖该文件。

(2)save(filename,variables) 仅保存 variables 指定的结构体数组的变量或字段。

(3)save(filename,variables,fmt) 以 fmt 指定的文件格式保存。variables 参数为可选参数。如果您不指定 variablessave 函数将保存工作区中的所有变量。

 

例如,要保存名为 test.mat 的文件,这些语句是等效的:

save test.mat      % command form
save(\'test.mat\')   % function form

您可以包括先前语法中介绍的任何输入。例如,要保存名为 X 的变量:

save test.mat X       % command form
save(\'test.mat\',\'X\')  % function form