我继承了一些代码,使作者厌恶分号。是否可以一劳永逸地修复所有mlint消息(至少是所有具有自动修复的消息),而不必单击每个消息并按ALT + ENTER?
最佳答案
注意:该答案使用函数MLINT,在较新版本的MATLAB中不再推荐使用该函数。首选较新的函数CHECKCODE,并且下面的代码仍然可以通过简单地将对MLINT的调用替换为对该较新函数的调用来工作。
我不知道一般基于MLINT消息自动修复代码的方法。但是,在您的特定情况下,您可以采用一种自动方式将分号添加到发出MLINT警告的行中。
首先,让我们从这个示例脚本junk.m
开始:
a = 1
b = 2;
c = 'a'
d = [1 2 3]
e = 'hello';
第一,第三和第四行将为您提供MLINT警告消息“用分号终止语句以禁止输出(在脚本内)”。使用MLINT的函数形式,我们可以在文件中找到发生此警告的行。然后,我们可以从文件中读取所有代码行,在发生警告的行末尾添加分号,然后将代码行写回到文件中。这是执行此操作的代码:
%# Find the lines where a given mlint warning occurs:
fileName = 'junk.m';
mlintID = 'NOPTS'; %# The ID of the warning
mlintData = mlint(fileName,'-id'); %# Run mlint on the file
index = strcmp({mlintData.id},mlintID); %# Find occurrences of the warnings...
lineNumbers = [mlintData(index).line]; %# ... and their line numbers
%# Read the lines of code from the file:
fid = fopen(fileName,'rt');
linesOfCode = textscan(fid,'%s','Delimiter',char(10)); %# Read each line
fclose(fid);
%# Modify the lines of code:
linesOfCode = linesOfCode{1}; %# Remove the outer cell array encapsulation
linesOfCode(lineNumbers) = strcat(linesOfCode(lineNumbers),';'); %# Add ';'
%# Write the lines of code back to the file:
fid = fopen(fileName,'wt');
fprintf(fid,'%s\n',linesOfCode{1:end-1}); %# Write all but the last line
fprintf(fid,'%s',linesOfCode{end}); %# Write the last line
fclose(fid);
现在,文件
junk.m
应该在每行末尾都有分号。如果需要,可以将上面的代码放在一个函数中,以便可以在继承的代码的每个文件上轻松运行它。