在.m文件的开头查找特定字符

时间:2015-06-26 06:22:47

标签: regex matlab

我是Matlab的新手,我正在尝试编写一个程序,该函数应该在.m文件中声明函数之前搜索管道符号|

例如:

% |
function y = add(x,z)
    y = x+z
end

我知道如何继续,但我无法为其编写代码:

  1. 询问用户应该解析的文件
  2. 打开文件
  3. 跳过文件开头的所有空行
  4. 在函数声明之前提取第一条注释,根据|符号的存在而继续
  5. 到目前为止,我能够将其放入代码中:

    function y = filesearch()
    %Ask user for file to parse
    [fileName, filePath] = uiputfile('*.m','Choose file you want to parse');
    % Open the file:
    fid = fopen(filePath);
    
    % Skip empty lines:
    defLine = '';
    while all(isspace(defLine))
        defLine = strip_comments(fgets(fid));
    end
    % Check for presence of |
    

    正如您所看到的,我无法想到可以删除注释的行(如果存在)并检查是否存在管道符号。

    此外,虽然现在不是优先事项但是如果满足某些参数,我想在每行的末尾使用此符号。 例如:

    Algebraic(行号末尾没有|符号)

    R1 = 1; R2 = 2; R3 = 3;
    Rs = R1 + R2 + R3; 
    

    Differential(|在dydt语句结束时)

    % |
    function dydt = vanderpoldemo(t,y,Mu)
    %VANDERPOLDEMO Defines the van der Pol equation for ODEDEMO.
    dydt = [y(2); Mu*(1-y(1)^2)*y(2)-y(1)]; % |
    

    对于上述差异情况,我认为需要正则表达式(一旦在函数声明之前找到初始|)以检查是否存在|在声明不是代数的行的末尾。

    我很感激有关如何提取和检查初始评论的任何帮助或建议,以及是否可以实现我的其他问题,我应该检查每行的末尾是否存在符号。

1 个答案:

答案 0 :(得分:1)

以下代码逐行浏览文件并在注释中搜索管道符号。它在被发现后停止:

fid = fopen('add.m');
% Check for presence of | in a comment
tline = fgetl(fid);
while ischar(tline)
    if strfind(tline,'%')       % find comments
        if strfind(tline,'|')   % find pipe
            disp(tline)         % do something
            break;              % stop while loop
        end
    end
    tline = fgetl(fid);
end
fclose(fid);