从路径名中提取信息



我想在 MATLAB 中创建一个脚本,用某个名称保存我的输出数据。此名称的所有信息都位于输入数据的路径中,如下所示:

path = 'C:projektions100algorithm1method_Adata1';
projection = 
algorithm =
method =  
data = 

然后,脚本应该使用关键字(f.e. method(从相邻的反斜杠中提取路径中的文本,以便脚本更灵活,以防我对某些文件夹名称犯拼写错误。 这就是我发现在起点和终点之间提取文本的方法,但我不能简单地使用反斜杠,因为路径中有一些反斜杠。 我应该怎么做?

您可以简单地使用带有命名令牌的regexp

>> path = 'C:projektions100algorithm1method_Adata1';
>> all=regexp(path,'[^\]+\proje[ck]tion(?<projection>[^\]+)\algorithm(?<algorithm>[^\]+)\method(?<method>[^\]+)\data(?<data>.+$)','names')
all = 
struct with fields:
projection: 's100'
algorithm: '1'
method: '_A'
data: '1'

问题在于如何找到关键字的结尾。这是一个位代码,它循环遍历关键字并在路径中查找它们(存储在p2fldr中,因为变量path返回 MATLAB 中的工作路径,如果您定义它,您将掩盖它(。

p2fldr = 'C:projektions100algorithm1method_Adata1';
% keywords
kyWrd = {'projection','algorithm','method','data'};
Tag = cell(size(kyWrd));
for i = 1:length(kyWrd)
% get keyword
ky = kyWrd{i};
% look for it in the path
idx = strfind(p2fldr,ky);
if ~isempty(idx)
% remaining path
idx_offset = idx+strlength(ky);
prm = p2fldr(idx_offset:end);
% look for file separator ''
idx_tmp = strfind(prm,filesep);
% if you don't find one, it is pabably the last entry, so take the
% length
if isempty(idx_tmp)
idx_tmp = length(prm)+1;
end
% this is the index where it ends
idx2 = idx_tmp(1)-1;
% assign to tag-cell
Tag{i} = prm(1:idx2);
end
end

如果您知道它们始终位于路径的最后 4 个条目中,则可以构建快捷方式,因此您可以立即使用strsplit并为最后返回的单元格编制索引

str_splt = strsplit(p2fldr,filesep);
Tag = cell(size(kyWrd));
for i = 1:length(kyWrd)
% index cells
str = str_splt{end-length(kyWrd)+i};
% get keyword
ky = kyWrd{i};
Tag{i} = str(length(ky)+1:end);
end

请注意,这并不关心它是否与您的关键字匹配(例如,您的路径显示'projektions'但我将关键字定义为'projection'(

相关内容

  • 没有找到相关文章

最新更新