【MATLAB进阶】以Cell文件格式读写txt文件

任务:

        在程序开始读入.txt文件中的参数值,在程序运行结束后将调整的参数存入这个txt文档中,以供下次使用。

实现:

1. 将参数存在txt文档,格式如下:

每行列出一个参数,并且以参数值、逗号、参数名的格式,即:“ [参数] ,  [参数名]  ”。

2. 从txt读取——函数fopen(filepath)、textscan(fileID, readformat)、fclose(fileID)

filename = 'paras.txt';%文件路径
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,'paras.txt');%写入。此步不需要用fopen打开文件,直接将cell数据写入txt文件

% type(filename);%不用打开文件,在命令窗口打印txt文件内容。(此步并不是必须的)

②采用fprintf函数,逐个写入数据:

fileId=fopen('paras1.txt','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文件的格式:

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':此项设置注释符号,此处设置为'//'双斜线,即双斜线之后的内容视为注释(也不读入)。

更多格式可以参考官方文档:https://ww2.mathworks.cn/help/matlab/ref/textscan.html

 

这里是童小喵,趟大家没趟的坑,写大家都爱看的文。欢迎点赞支持~喵~

  • 4
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值