完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
一、 目的
工作中有时候感觉编程也是一种重复性劳动,尤其是涉及到读写数据一类的内容,还有一些需要进行配置的场合,有时候就想,既然是重复性的劳动,为什么不交给工具来做呢,这就产生了使用代码生成代码的想法。本文提到的实现文本内容批量替换是实现代码自动生成的一个步骤,实现了找到文本中指定的段落,并把该段落换成另外的内容。 二、 基本思想 实现文本内容批量替换可以大致分为以下几个步骤:
编写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:xxxxx.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,"%sn",newcell {i}); end fclose(fid); 五、 补充 编写该代码的目的是实现代码的自动生成,2017年的时候接触st公司的cube mx工具,该工具一改传统的stm32库函数编程方式,使用图形界面实现外设的初始化,大大提高的开发效率,令我印象深刻。 如今工作中遇到需要根据某些属性改变反复修改代码,就尝试实现一个简陋的代码生成工具,便有了上述脚本。有些场合需要根据配置反复修改代码,可以尝试把配置放到excel或者数据库,然后使用matlab完成代码段的格式化,然后用新的代码段覆盖旧的代码段,以提升开发效率。 |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1627 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1550 浏览 1 评论
984 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
688 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1601 浏览 2 评论
1867浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
650浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
518浏览 3评论
536浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
506浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 19:07 , Processed in 0.680603 second(s), Total 78, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号