我在.m文件中有大约400行代码。这个文件执行了很多次,所以它是程序中最大的时间消费者。有时当我执行程序时,我只需要运行400行中的大约50行(50行中的哪一行将在执行开始时确定)。我希望能够指定应该运行哪些行(或者在应该丢弃的行上自动获得等效的“%-comment”),而不使用任何带来时间开销的if语句或类似语句。是否有可能实现这一目标?
答案 0 :(得分:1)
这是你要找的吗?
s = (1+1==2);
fin = fopen('foo.m','r');
fout = fopen('foo_edit.m','w+');
if s
while (~feof(fin))
tline = fgetl(fin);
if (~isempty(regexp(tline, '^[^(% )].*\% conditional$', 'once')))
fprintf(fout, '%% %s\n', tline);
else
fprintf(fout, '%s\n', tline);
end
end
else
while (~feof(fin))
tline = fgetl(fin);
if (~isempty(regexp(tline, '^% .*\% conditional$', 'once')))
fprintf(fout, '%s\n', tline(3:end));
else
fprintf(fout, '%s\n', tline);
end
end
end
fclose(fin);
fclose(fout);
delete foo.m
movefile('foo_edit.m', 'foo.m')
foo(5)
让Matlab为您发表评论。
....这是foo.m
function y = foo (x)
x = x*5;
% x = x+1; % conditional
x = x+20;
% x = x*2; % conditional
y = x;
end
答案 1 :(得分:1)
假设您有很多次执行的行,您可以通过将它们写入单独的函数来节省一些时间。
以下是如何做到这一点:
v
full
的单元格数组,(您可以右键单击并执行导入,此处还可以创建脚本以自动执行此操作)写作可以这样完成:
dlmwrite('reduced.m',vertcat(full{v}),'')
答案 2 :(得分:0)
if
- 声明可能是最快的可能,请使用它。您也可以将文件作为文本文件读取,并使用eval
运行您想要的部分。在没有测试的情况下,我确信if
- 语句更快或速度相同,使用eval
经常搞砸JIT编译器。