什么是最好的方法与其他脚本文件编辑脚本文件吗?

1视图(30天)
假设我有这个脚本目前(a):
temp1 = 435;
variable4 = 99990;
东西= 56;
使用另一个脚本(B)我希望这个输出:
新= 145;
var = 776;
一件= 9;
我有一个excel电子表格,1列的旧变量名和另一列包含新的变量名和第三列的新值。我已经改变的变量名,但我怎么查找和替换旧的值和新值吗?我想到了使用strfind发现‘=’和‘;’在哪里,然后抓住一切之间和替换它,但我认为这不是最好的方法是这样的。意见吗?
1评论
塞德里克Wannaz
塞德里克Wannaz 2015年8月14日
编辑:塞德里克Wannaz 2015年8月14日
前值固定/常数或他们能改变吗?如果一切都是固定的,最好的方法可能是STRREP。如果他们可以改变,那么最好的方法当然是REGEXPREP。

登录置评。

接受的答案

塞德里克Wannaz
塞德里克Wannaz 2015年8月14日
编辑:塞德里克Wannaz 2015年8月14日
你可以做一些下面的线。如你没有4列在你的Excel文件,我认为前者值可以是任何东西,我用REGEXPREP:
originalLocator =“原始”;%原M-Files存储的文件夹。
modifiedLocator =“修改”;%文件夹修改M-Files将被保存。
replacementsLocator =“replacements.xlsx”;
如果~存在(modifiedLocator“dir”)
mkdir (modifiedLocator);
结束
[~,~,repArray] = xlsread (replacementsLocator);
D = dir (fullfile (originalLocator,“* m”));
fId_in = 1:元素个数(D)
% - - - - - -读原始。
内容= fileread (fullfile (originalLocator, D (fId_in) . name));
% - - - - - -修改申请。
vId = 1:尺寸(repArray, 1)
模式= sprintf (' % s \ \ s * = \ \ s * [^;] +;”repArray {vId 1});
更换= sprintf (“% s = % d;”2},,repArray {vId repArray{请看3});
内容= regexprep(内容、模式、更换、“一次”);
结束
% -输出修改文件。
fId_out = fopen (fullfile (modifiedLocator, D (fId_in) . name),' w ');
写入文件(fId_out、内容);
文件关闭(fId_out);
结束
注意的模式是由第一个调用SPRINTF:它具有以下结构(当变量名 temp1 ):
temp1 \ s * = \ s * [^;] +;
匹配:
  • 文字“temp1”
  • 其次是0或多个空白字符(\ s *)
  • 其次是文字“=”
  • 其次是0或多个空白字符(\ s *)
  • 紧随其后的是一个或多个字符,不在“;”([^;])
  • 其次是文字“;”
我们可以使它不太具体,但是我们需要它匹配的风险之前别的(不是因为我们使用后的“曾经”参数调用REGEXPREP,所以替换是仅适用于第一个匹配)。
2的评论
塞德里克Wannaz
塞德里克Wannaz 2015年8月14日
编辑:塞德里克Wannaz 2015年8月14日
嗨,罗德里格斯。我不确定我理解你的要求。我的回答如下:
  1. 打开Excel文件(你可能不得不调整文件名称),读3列单元阵列替代规则和存储单元阵列命名repArray(这是“原始”输出XLSREAD)。
  2. 得到M-Files的清单(*与原M-Files . m)的文件夹。
  3. 遍历文件。
对于每个文件,以下是:
  1. 读取文件作为一个字符串。
  2. 数组的遍历行替换规则,并执行替换。
  3. 修改后的文件内容导出到一个新文件在输出文件夹中(左不变的原始文件,以防)。
现在更换模式与第一次调用SPRINTF动态构建,你在哪里看到我插入变量名初的模式,然后我用一个静态的字符串创建模式(我必须逃避反斜杠所以他们不被SPRINTF)。
这意味着你不需要硬编码任何模式中的变量名。它是建立自动从Excel文件的内容。
我附上一个例子(以)。最好的,你可以做的是一步一步使用调试器来运行它,所以你可以观察模式构建,如何构建替换字符串等。
在调试器中运行它,打开 main.m 将鼠标放在线:
originalLocator =“原始”;
新闻 F12 。你看按 F12 你可以切换左边的红点。这是一个断点。如果你现在运行代码,MATLAB执行到断点(其实之前),并停止。你在调试器。一个绿色的箭头表示要执行的下一行,并命令的提示窗口从字母开始 K (键盘模式)。如果您按 F10 执行,(这是一个“步骤”,也可以通过单击步骤按钮在编辑器中带)。现在你看到变量 originalLocator 定义(行被执行死刑)。在工作区中您可以看到,或者只是通过键入命令窗口中的变量名。按 F10 (或步骤)先后,可以遵循程序的功能。如果你去到的变量 sepArray 定义,您可以显示它,看看替换规则。然后你继续直到变量 模式 定义,你看到它插入第一个模式中的变量名。如果你继续这样,你将会看到MATLAB循环在替换规则,保存第一个文件(将出现在您的文件系统),并循环到第二个文件。
希望它可以帮助!

登录置评。

答案(1)

Muthu Annamalai
Muthu Annamalai 2015年8月14日
编辑:Muthu Annamalai 2015年8月14日
@Rodriguez, @Cedric我建议另一种方式看问题;这将是很高兴有相同的脚本返回不同的结果基于一些更新。
我想知道可能来自一个垫的更新文件或一个CSV文件,,
函数data = script_fcn ()
latest_data =负载(“fname.mat”)%或csvread (…)
data_modified =过程(数据)%一些处理
数据= data_modified.fieldx;
结束
,当然用户可以从另一个脚本更新垫/ CSV。
1评论
塞德里克Wannaz
塞德里克Wannaz 2015年8月14日
是的,我认为这是某种形式的一次性代码重构操作。否则我认为我们可以阻止OP定期执行这样的操作。

登录置评。

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!