Matlab中怎样自动修改m文件中的几个数值再运行程序
【Matlab中怎样自动修改m文件中的几个数值再运行程序】 为什么要这么做?为什么不把脚本变成function然后把变量传进去?
■网友
可以考虑设置成全局变量,这样可以实现每次运行只改它们的数值
■网友
@波特 我今天编了个流程控制函数把问题解决了。
由于计算任务的特殊性,需要不断调用运行main.m文件的部分或全部,或修改某些参数再运行。把main.m文件写成函数文件是最容易想到的做法。但我的问题的特殊性在于,main.m只有部分数据需要不断修改,文件中还有其他原始计算数据。我不愿意将原始数据留在函数中,这样程序流程、逻辑和数据都很混乱。因此我绕开了将main.m函数化处理,也不必手动操作。用一个流程控制函数解决反复调用问题。
流程控制函数我贴在下面。这个函数比较通用,有同样需要人可以拿去用。function =ProcessControl(mfname,StartLine,BreakLine,ReplaceLine,ReplaceCell)% 流程控制% 函数功能说明% 运行目标脚本文件的一部分,从StartLine行到BreakLine行% 其中ReplaceLine行替换成ReplaceCell中的语句% Inputs 类型 需要 内容% mfname 字符 是 目标脚本文件% StartLine 标量 是 开始行% BreakLine 标量 是 结束行% ReplaceLine 向量 否 替换行% ReplaceCell 胞元 否 替换行语句% 格式% ReplaceCell = {String1, String2, ...};% String1, String2 为字符串% 输入处理switch nargin case 3 ReplaceLine=; ReplaceCell={}; case 5 if length(ReplaceLine)~=length(ReplaceCell) error(\u0026#39;input error!\u0026#39;) end otherwise error(\u0026#39;input error!\u0026#39;)end% 目标脚本文件fidread=fopen(mfname);% 生成临时文件TempFileName=strcat(\u0026#39;temp\u0026#39;,datestr(now,\u0026#39;yyyymmddFFF\u0026#39;),char(randi(,1,8)),\u0026#39;.m\u0026#39;);fidwrite=fopen(TempFileName,\u0026#39;w\u0026#39;);% 写临时文件ii=0;while ~feof(fidread) tline=fgetl(fidread); ii=ii+1; id=find(ReplaceLine==ii); if ii\u0026gt;=StartLine \u0026amp;\u0026amp; ii\u0026lt;BreakLine if isempty(id) fprintf(fidwrite,\u0026#39;%s\\r\\u0026#39;,tline); else fprintf(fidwrite,\u0026#39;%s\\r\\u0026#39;,ReplaceCell{id}); end elseif ii==BreakLine if isempty(id) fprintf(fidwrite,\u0026#39;%s\u0026#39;,tline); break; else fprintf(fidwrite,\u0026#39;%s\u0026#39;,ReplaceCell{id}); break; end endendfclose(fidread);fclose(fidwrite);% 运行临时文件evalin(\u0026#39;caller\u0026#39;,);delete(TempFileName);两个应用的例子% 算例1: 修改main.m中的参数并运行% main.m文件格式% 1 clear all% 2 ...% 3 X1=30*pi/180;% 4 X2=4000;% 5 X3=4000;% 6 ...% 7 flag=0;% 8 ...String1=‘X1=100*pi/180;’;String2=‘X2=200;’;String3=‘X3=300;’;String4=‘flag=1;’;StartLine=2;BreakLine=8;ReplaceLine=;ReplaceCell={String1, String2, String3, String4};ProcessControl(\u0026#39;main.m\u0026#39;,StartLine,BreakLine,ReplaceLine,ReplaceCell);% 算例2: 运行main.m中的某两行StartLine=3;BreakLine=4;ProcessControl(\u0026#39;main.m\u0026#39;,StartLine,BreakLine);
■网友
文件第一行改为:function y= main(X1,X2,X3,flag)
推荐阅读
- 聪明人养花,这3种“花”怎样也要养一盆,每年能省不少医药费
- 互联网怎样解决“家政服务上门速度慢”的问题
- 环球车讯网|新款领克01起售价17.98万元,自动驾驶辅助等级达到L2+
- 怎样看待从1月8号起,QQ钱包开始提现收费
- 银行it人怎样转型
- 汽车知识|第八代高尔夫到底值不值得买?1.4T自动Pro版全款多少钱?
- 汽车|冬天怎样让车内温度快速升高?座椅加热的最佳使用方式二,外循环的作用总结
- 怎样进入通信行业
- 怎样评价扶他柠檬茶的小说《云养汉》的结尾
- 怎样成为一名合格的Python程序员?
