【MATLAB进阶】以Cell⽂件格式读写txt⽂件
任务:
在程序开始读⼊.txt⽂件中的参数值,在程序运⾏结束后将调整的参数存⼊这个txt⽂档中,以供下次使⽤。
实现:
1. 将参数存在txt⽂档,格式如下:
每⾏列出⼀个参数,并且以参数值、逗号、参数名的格式,即:“ [参数] , [参数名] ”。
2. 从txt读取——函数fopen(filepath)、textscan(fileID, readformat)、fclose(fileID)
filename = '';%⽂件路径
fileID = fopen(filename);%在MATLAB后台打开⽂件
C = textscan(fileID,'%f %s ','Delimiter',',');%读。读取的C为1x2的cell格式数据
fclose(fileID);%读完后即关闭⽂件
D=[num2cell(C{1}),C{2}];%整理数据结构。(将读取的两列⽂件组成⼀个新的cell数据D)
读取操作主要⽤到了三个函数:
fopen(filepath) —— 打开路径下的txt⽂档,打开后返回⼀个fileID,⽤此来操作打开的⽂档;
textscan(fileID, readformat) ——matlab推荐的读取txt⽂档的函数,第⼀参数是上⼀步获得fileID;第⼆个参数是读取的格式,这⾥⽤到的格式是'%f %s','%f'表⽰读取浮点数值,'%s'表⽰读取字符串;第三个参数为可选格式类型( 'Delimiter', ',' ) ,表⽰浮点数值和字符串数值之间由','逗号间隔。当然读取的格式并不局限于此,更多的格式参照最后⼀部分“txt⽂件的格式”。
fclose(fileID) —— 对⽂件操作完成后,关闭fileID指向的⽂件,此步⾮常必要,建议读取完成需要的内容后执⾏此步。防⽌程序意外中断后,⽂件⽆法进⾏修改和操作。
通过以上,读取到⼀个cell类型的变量C,它由⼀个double类型的数组和⼀个cell类型的变量组成。
为了⽅便后续对数据的修改,通过最后⼀⾏代码将C的结构重新整合成⼀个如下结构的cell变量D 。修改后的D在索引时和矩阵的
索引⽅式相同,只是需要采⽤⼤括号,例如D{i, j}。
3. 修改参数并写⼊txt:
①采⽤函数writercell直接将D写⼊:
D{index,1}=value;%对由index索引⾏的参数进⾏修改
writecell(D,'');%写⼊。此步不需要⽤fopen打开⽂件,直接将cell数据写⼊txt⽂件
% type(filename);%不⽤打开⽂件,在命令窗⼝打印txt⽂件内容。(此步并不是必须的)
②采⽤fprintf函数,逐个写⼊数据:
fileId=fopen('','wt');%以写⼊权限的⽅式打开⽂件
[m,n]=size(D);
for i=1:m
for j=1:n
if j==n
fprintf(fileId,'%s\n',D{i,j});%每⾏的第⼆个字符写⼊后利⽤\n回车
else
fprintf(fileId,'%f,',D{i,j});%每⾏的数字写⼊后,后添加逗号,与后⾯的字符串相隔
end
end
end
fclose(fileId);%关闭⽂件
txt⽂件的格式:
fprintf格式C = textscan(fileID,'%s %n %n %n %n', 'Delimiter',',', 'TreatAsEmpty',{'NA','na'}, 'CommentStyle','//');
'%s %n %n %n %n': 为字符的类型和排列⽅式。所有的类型有:
%d:有符号整数
%u:⽆符号整数
%f:浮点数
%s:字符串
%c:单个字符
%D:时间和⽇期
%n:⾃然数
'Delimiter':此项设置字符之间分割的符号,此处设置分割符号为:','
'TreatAsEmpty':此项设置视为空的字符,此处设置为{'NA','na'},即遇到'NA'或'na'时不读⼊
'CommentStyle':此项设置注释符号,此处设置为'//'双斜线,即双斜线之后的内容视为注释(也不读⼊)。这⾥是童⼩喵,趟⼤家没趟的坑,写⼤家都爱看的⽂。欢迎点赞⽀持~喵~
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论