gpt4 book ai didi

MATLAB:从 'command line' 确定依赖项,不包括内置依赖项

转载 作者:太空宇宙 更新时间:2023-11-03 20:32:00 25 4
gpt4 key购买 nike

有没有办法确定 .m 文件的所有依赖关系以及它使用脚本(命令行)中的命令调用的文件的任何依赖关系?

之前有一道这样的题,真的很好,因为它建议使用depfun函数。但问题是它正在输出 MATLAB它也依赖于相关文件。

例子:测试.m

disp('TESTING!!');

depfun('测试')的输出

'C:\testing.m'
'C:\MATLAB\R2008a\toolbox\matlab\datatypes\@opaque\char.m'
'C:\MATLAB\R2008a\toolbox\matlab\datatypes\@opaque\double.m'
'C:\MATLAB\R2008a\toolbox\matlab\datatypes\@opaque\toChar.m'
'C:\MATLAB\R2008a\toolbox\matlab\elfun\log10.m'
'C:\MATLAB\R2008a\toolbox\matlab\elmat\ans.m'

等等

列表有点长。

这里的重点是我希望有一些类似的功能或标志可以删除这些不需要的依赖项。

最佳答案

这里有几个链接,我在编写一个简单的函数来创建 table of contents for an m-file 时发现它们很有用。 :

  • 讨论未记录函数的线程 MLINTMEX
  • FDEP作者:Urs Schwarz 在 MathWorks 文件交换上
  • FARG作者:Urs Schwarz 在 MathWorks 文件交换上

编辑:由于这个问题激起了我的好奇心,我开始尝试一些可能的方法来解决它。查找非工具箱 .m 和 .mex 文件的依赖关系相对简单(我在 MATLAB 版本 7.1.0.246 中这样做):

fcnName = 'myfile.m';
fcnList = depfun(fcnName,'-quiet');
listIndex = strmatch('C:\Program Files\MATLAB71\toolbox',fcnList);
fcnList = fcnList(setdiff(1:numel(fcnList),listIndex));

在这里,我刚刚使用了DEPFUN获取依赖项,然后我删除了所有以“C:\Program Files\MATLAB71\toolbox”开头的文件,其中 MATLAB 工具箱位于我的机器上。请注意,这假设您没有将任何自己的代码放在这些 MATLAB 目录中(无论如何您都不应该这样做)。

为了获得对 .mat 和 .txt 文件的依赖,我采用了另一种方法。对于您从上述代码中获得的每个文件,您可以将文件的文本加载到 MATLAB 中并使用正则表达式对其进行解析以查找以“.mat”或“.txt”结尾的字符串:

fid = fopen(fcnName,'rt');
fcnText = fscanf(fid,'%c');
fclose(fid);
expr = '[^\'']\''([^\''\n\r]+(?:\w\.(?:mat|txt)){1})\''[^\'']';
dataFiles = regexp(fcnText,expr,'tokens');
dataFiles = unique([dataFiles{:}]).';

我使用的正则表达式有一些限制:

  • 如果您在注释中出现类似“help.txt”的字符串(例如函数的帮助注释 block ),它仍会被正则表达式检测到。我尝试使用环视运算符来解决这个问题,但运行时间太长。

  • 如果您从变量构建一个字符串(例如“fileString = [someString '.mat']”),正则表达式将不会检测到它。

  • 返回的文件名字符串将是相对路径字符串。换句话说,如果函数中有 'help.txt' 或 'C:\temp\junk.mat' 字符串,正则表达式匹配将返回 'help.txt' 或 'C:\temp\junk.mat' ',就像它们出现在函数中一样。要查找完整路径,您可以使用 WHICH每个数据文件上的函数(假设文件位于 MATLAB 路径中的某处)。

希望您觉得这些有用! =)

关于MATLAB:从 'command line' 确定依赖项,不包括内置依赖项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/592680/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com