How to search for specific characters within a string.

Say I have the following files,
foo1.85e-01.mat
foo1.79e+00.mat
foo1.82e+00.mat
foo1.94e+00.mat
foo2.30e+00.mat
How can I select just the files with numbers between 1.8 and 2.0, i.e., the third and fourth files? Together the commands
flist = dir('foo1.8*e+00.mat')
and
flist = dir('foo1.9*e+00.mat')
return all the desired files. But is there a single query that will return the same files?

 Akzeptierte Antwort

dpb
dpb am 18 Sep. 2013
The OS wildcard search isn't flexible enough directly; I'd just return them all and then winnow the list while processing it -- sotoo
d=dir('foo*.mat');
for ix=1:length(d)
fn=d(ix).name;
if ~iswithin(sscanf(fn,'foo%f.mat'), 1.8, 2.0), break, end % skip unwanted
...
end
where iswithin is my handy helper function
function flg=iswithin(x,lo,hi)
% returns T for values within range of input
% SYNTAX:
% [log] = iswithin(x,lo,hi)
% returns T for x between lo and hi values, inclusive
flg= (x>=lo) & (x<=hi);

2 Kommentare

Alex
Alex am 1 Okt. 2013
Thanks, dpb. I've implemented something similar in my code now. The sscanf function was the thing I was looking for, something that would extract numbers from a string.
dpb
dpb am 1 Okt. 2013
Glad it helped...

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (0)

Produkte

Tags

Gefragt:

am 18 Sep. 2013

Kommentiert:

dpb
am 1 Okt. 2013

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by