strfind issue

10 次查看(过去 30 天)
Robbie
Robbie 2011-11-29
Hi,
I have a filename (including whole path) as a string with directories separated by / e.g. root/folder/file.
I am using strfind to find the slashes as follows and to give an index array of the position of the / symbols, :
% Find all occurances of the string '/'
[no_slash] = strfind ( line, '/' );
and then trying to extract the filename as a string as follows:
% Extract the case number:
caseNo = ( [no_slash(3)+1 : no_slash(3)+4] );
I get NaN returned and I don't know why! If anyone has an idea or an alternative method then it would be much appreciated!!
Thanks,
Robbie

采纳的回答

Matt Tearle
Matt Tearle 2011-11-29
As Daniel says, there must be more going on. Can you copy the code directly? strfind returns the indices; if there are no matches, it returns []. Hence, if line was 'root/folder/file', strfind(line,'/') returns [5,12].
So in this case you'd get an indexing (out of bounds) error on the next line. If there was three slashes in the string, you'd get a vector like [13, 14, 15, 16].
Are you perhaps trying to extract a portion of the string and str2num it? In which case, you want
caseNo = str2double(line(no_slash(3)+1 : no_slash(3)+4))
(Note: if you leave out the line in the above command, you get NaN. Or if line isn't a string.)
  2 个评论
Daniel Shub
Daniel Shub 2011-11-29
Good call on the str2double returning NaN.
Robbie
Robbie 2011-11-29
Yeah I got it working by adding in the 'line' thanks for your help it is much appreciated.

请先登录,再进行评论。

更多回答(1 个)

Daniel Shub
Daniel Shub 2011-11-29
The only way
[no_slash(3)+1 : no_slash(3)+4]
can be equal to NaN is if no_slash(3) is equal to NaN. You are not showing us something important because I am pretty sure that strfind does not return NaN.
All that said fileparts might help you out...
doc fileparts
  3 个评论
Daniel Shub
Daniel Shub 2011-11-29
What is no_slash equal to? Can you check that line is also a string. Please post a MWE with what line needs to be to get the error?
Robbie
Robbie 2011-11-29
Thanks, I got it working from matt's suggestion (I left out the line) and it works fine now, I also got it working through fileparts. Your help is much appreciated:
caseNo = line(no_slash(3)+1 : no_slash(3)+4)

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Characters and Strings 的更多信息

标签

Community Treasure Hunt

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

Start Hunting!

Translated by