clc;
filepath = '..\******\';
dirOutput = dir(fullfile(filepath,'*.ply'));
plyName = {dirOutput.name}';
propmt = 'input the gsigma value\n';
gsigma = input(propmt,'s');
propmt = 'input the tsigma value\n';
tsigma = input(propmt,'s');
expr = ['gsigma_' gsigma '_tsigma_' tsigma];
res = regexp(plyName,expr,'match');
index = ~cellfun('isempty', res);
out = plyName(index);
regexp是正则表达式,能够搜索出匹配的内容,但是由于搜索对象是元胞数组,所以返回的res是和元胞数组同等维度的元胞数组,但仅在搜索对象符合条件处不为空,故借此特点可以提取出符合条件的元胞内容。效果如图所示。
如果需要用户输入数值类型的数据,可以将输入函数修改为如下的形式。
propmt = 'input the tsigma value\n';
gsigma = input(propmt);
clc;clear;
filepath = '..\NoisedPlyFiles\';
dirOutput = dir(fullfile(filepath,'*.ply'));
plyName = {dirOutput.name}';
propmt = 'input the gsigma value\n';
gsigma = input(propmt,'s');
propmt = 'input the tsigma value\n';
tsigma = input(propmt,'s');
expr = ['gsigma_' gsigma '_tsigma_' tsigma];
res = regexp(plyName,expr,'match');
index = ~cellfun('isempty', res);
out = plyName(index);
%这里是为了能让输出的文件名前面有个序号,以便文件太多了无法知道文件名对应的索引是哪个
num = size(out,1);
output = cell(num,1);
for i = 1:num
output{i} = [int2str(i),'-',out{i}];
end
disp(output);
clear output;
%这里清楚output是因为程序中并没有清空全部,但是每次的output不同,所以这里清空比较好,防止输出上次的信息
promt = 'choose one content to display\n';
index = input(promt);
displayName = out{index};
上面是实现功能的一个完整的程序,后面加入了一段在匹配内容前加索引的代码,目的是能够通过用户输入来选择操作哪个文件,但是文件多了不太好找出索引,所以加了这个索引方便用户选择。