matlab实现文本内容批量替换

一、 目的

工作中有时候感觉编程也是一种重复性劳动,尤其是涉及到读写数据一类的内容,还有一些需要进行配置的场合,有时候就想,既然是重复性的劳动,为什么不交给工具来做呢,这就产生了使用代码生成代码的想法。本文提到的实现文本内容批量替换是实现代码自动生成的一个步骤,实现了找到文本中指定的段落,并把该段落换成另外的内容。

二、 基本思想

实现文本内容批量替换可以大致分为以下几个步骤:

  1. 打开一个文本文件,读取到cell数组,srcCell
  2. 逐行读取srcCell数组并逐行抄到tmpCell,直到遇到要替换段落的起始行。
  3. 将要替换的目标内容desCell写到tmpCell.
  4. 继续逐行读取srcCell,直到读到要替换的段落的结束行。
  5. 继续逐行读取srcCell,把srcCell的剩余内容抄到tmpCell
  6. 将temCell写入到文件
    至此完成文本替换。

三、 代码实现

编写matlab函数strReplace()如下:

function [outCell] = strReplace(srcCell,desCell,beginStr,endStr)
outPointer = 0;
srcCellSize = size(srcCell);
desCellSize = size(desCell);

endRowNum = strmatch(beginStr,srcCell);%起始替换内容位置
range = 1 : endRowNum;
for i = range
    outPointer = outPointer + 1;
    outCell{outPointer} = srcCell{i};    %先抄下来srcCell需要替换内容前的行
end

range = 1 : desCellSize;
for i = range
    outPointer = outPointer + 1;
    outCell{outPointer} = desCell{i};   %接着写要替换的行
end

beginRowNum = strmatch(endStr,srcCell); %替换内容结束位置
range = beginRowNum : srcCellSize;
for i = range
    outPointer = outPointer + 1;
    outCell{outPointer} = srcCell{i};   %接着抄下来剩余的行
end
outCell = outCell'

其中outPointer为标记当前处理到哪一行的指针。使用该函数时srcCell为读取源文件获取到的cell,desCell为替换的目标cell,beginStr为要替换的起始行,string类型,endStr为要替换的结束行,string类型。

四、 其他工作

strReplace()实现了上述2-5步,需要注意的是,该函数认为beginStr,endStr为标记行,会保留这两行的信息。

可以使用如下方法将文本文件读取到cell数组

filepath = 'x:\xx\xxx.x';
fileData = importdata(filepath);

使用fprintf将替换完成的cell数组写会文本

newcell = strReplace(fileData,dscCell,"//module input begin","//module input end");
fid = fopen(fpath,'wt');
for i = 1:size(newcell )
    fprintf(fid,"%s\n",newcell {i});
end
fclose(fid);

五、 补充

编写该代码的目的是实现代码的自动生成,2017年的时候接触st公司的cube mx工具,该工具一改传统的stm32库函数编程方式,使用图形界面实现外设的初始化,大大提高的开发效率,令我印象深刻。

如今工作中遇到需要根据某些属性改变反复修改代码,就尝试实现一个简陋的代码生成工具,便有了上述脚本。有些场合需要根据配置反复修改代码,可以尝试把配置放到excel或者数据库,然后使用matlab完成代码段的格式化,然后用新的代码段覆盖旧的代码段,以提升开发效率。

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

深入浅出说电机

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值