MATLAB 数据采集的时候, 往往需要把得到的数据保存下来.
fid = fopen(文件名,'打开方式');
说明: fid 用于存储文件句柄值, 如果 fid>0, 这说明文件打开成功. 打开方式有如下选择:
'r': 只读方式打开文件 (默认的方式), 该文件必须已存在.
'r+': 读写方式打开文件, 打开后先读后写. 该文件必须已存在.
'w': 打开后写入数据. 该文件已存在则更新; 不存在则创建.
'w+': 读写方式打开文件. 先读后写. 该文件已存在则更新; 不存在则创建.
'a': 在打开的文件末端添加数据. 文件不存在则创建.
'a+': 打开文件后, 先读入数据再添加数据. 文件不存在则创建.
另外, 在这些字符串后添加一个 "t", 如'rt'或'wt+', 则将该文件以文本方式打开; 如果添加的是 "b", 则以二进制格式打开, 这也是 fopen 函数默认的打开方式.
一, 如果只是单纯的一个变量, 可以像下面这样写. g2ggg 是文件命名, txt 文件 (当然可以改成其他文件格式), 这个是 matlab 自动保存在工作文件下的, baocun 是我们要保存的变量.%d 代表整数,,\r\n 代表每写入一次数据换行.
- fid = fopen('g2ggg.xls','a');
- fprintf(fid,'%d \t',baocun);
fprintf(fid,'\r\n'); % 换行
fclose(fid);
其中:
fid = fopen('g2ggg.xls','a');
这句里面的'a'代表后续写入. 这样每次重新运行程序都不会替换之前保存的数据, 还是保存在之前保存过的文件夹里面, 接着之前的数据继续保存.
但是如果这个地方是'w', 则代表写入, 它写一次数据都会覆盖之前的数据, 最后你会发现 txt 文件里面只保存了一个数据. 除非你在程序中定义一个矩阵, 把这些数据每次存在矩阵里面, 到最后一次性保存这个矩阵, 这些数据才会全部保存下来, 但是切记你这次保存前的那个 txt 文件夹会被这次这个文件夹替换, 除非你这次文件夹命名和上次不同.
二, 如果是保存矩阵, 可像下面这样写. save_data 是文件命名, txt 文件, 这个是 matlab 自动保存在工作文件下的, baocun 是我们要保存的矩阵.%d 代表整数,,\r\n 代表每写入一次数据换行.
- fid = fopen('save_data.txt','a');
- [r,c]=size(baocun);
- for i=1:r
- for j=1:c
- fprintf(fid,'_\t',baocun(i,j));
- end
- fprintf(fid,'\r\n');
- end
- fclose(fid);
其中 :
fid = fopen('save_data.txt','a');
这句里面的'a'代表后续写入. 这样每次重新运行程序都不会替换之前保存的数据, 还是保存在之前保存过的文件夹里面, 接着之前的数据继续保存.
但是如果这个地方是'w', 则代表写入, 它每写一次数据都会覆盖之前的数据, 最后你会发现 txt 文件里面只保存了一个数据. 除非你在程序中定义一个矩阵, 把这些矩阵每次存在定义的这个矩阵里面, 到最后一次性保存这个矩阵, 这些数据才会全部保存下来, 但是切记你这次保存前的那个 txt 文件夹会被这次这个文件夹替换, 除非你这次文件夹命名和上次不同.
三, 前面两种情况都是 matlab 自动保存的工作路径下的, 如果我们需要 matlab 自动保存在指定路径下怎么办呢? 可以像下面这样写:
- fid = fopen('C:\Users\Desktop\g2ggg.txt','a');
- fprintf(fid,'%d,%d,%d \r\n',baocun);
其中
C:\Users\Desktop\
代表保存路径, 这里保存在电脑桌面.
四, 如果需要手动输入保存路径, 可以像这样写:
[FileName,PathName]=uiputfile({'*.txt','Txt Files(*.txt)';'*.xls','Excel(*.xls)';'*.*','All Files(*.*)'},'choose a File'); %% pathname 获取保存数据路径, filename 获取保存数据名称
- if ~FileName
- return;
- else
- str= [PathName,FileName];
fid = fopen(char(str), 'w'); % 要想存的文件名是自己输入的, 这个地方就得这样写
fwrite(fid, '','integer*4');
[r,c]=size(baocun); % 得到矩阵的行数和列数
- for i=1:r
- for j=1:c
- fprintf(fid,'%d\t',baocun(i,j));
- end
- fprintf(fid,'\r\n');
- end
- fclose(fid);
一般这样都是采集完成后由手工保存的, 在这里保存的是矩阵, 因为矩阵里面记录了之前每次的数据, 所以采集完成后, 一次性保存矩阵就可以保存所有数据了, 一般这段代码在 GUI 里面添加按钮的回调函数里面. 每次按下按钮就会弹出窗口让输入文件名以及选择保存路径.
这里增加了这段代码, 又修改了一小部分代码, 认真看就知道了.
[FileName,PathName]=uiputfile({'*.txt','Txt Files(*.txt)';'*.xls','Excel(*.xls)';'*.*','All Files(*.*)'},'choose a File'); %% pathname 获取保存数据路径, filename 获取保存数据名称
- if ~FileName
- return;
- else
- str= [PathName,FileName];
- fid = fopen(char(str), 'w');
五, 如果有需要保存字符串数组的话:
baocun={'R','G','B','Xdata'};
这个是包含字符串的数组 baocun,
- fid = fopen('save_data.txt','a');
- fwrite(fid, '','integer*4');
- for n=1:4
fprintf(fid,'%s\t',char(baocun{n})); % \t 表示空格
end
fprintf(fid,'\r\n'); % 换行
fclose(fid);
很多东西都是举一反三, 多动脑, 多尝试, 实在没办法就上网找答案, 一般都能找到.
来源: http://www.bubuko.com/infodetail-2732451.html