To Create a Variable with the name of a folder
11 views (last 30 days)
Show older comments
Hello!
I have a variable called this way;
workfolder='C:\Users\Jorge\Desktop\Work_Christmas\Measurements\rpm_measurements\rpm0800\';
And i would like to create another variable and it is the end of the name of my directory (workfolder), in order to use it with a loop, in this case it would be:
new_variable = rpm0800
How could i do it?
Thanks!
2 Comments
Accepted Answer
Stephen23
on 2 Jan 2015
Edited: Stephen23
on 2 Jan 2015
While the question is rather unclear, it seems that the OP wishes to extract the last directory in the filepath string. This can be achieved using fileparts :
>> [A,B] = fileparts(workfolder(1:end-(workfolder(end)==filesep)))
A = 'C:\Users\Jorge\Desktop\Work_Christmas\Measurements\rpm_measurements'
B = 'rpm0800'
Note first this removes any trailing file separator character using the indexing of the workfolder string. An alternative is to use regexp to locate the last directory in the filepath string:
>> regexp(workfolder,'[^/\\]+(?=[/\\]?$)','once','match')
ans = 'rpm0800'
You should also have a good read of the MATLAB wiki, which covers all of these basic usage questions, with handy examples too:
More Answers (1)
Image Analyst
on 2 Jan 2015
It's usually advised that you don't do that . However there is capability in MATLAB to do it and the FAQ shows some ways, such as using dynamic structure field names.
4 Comments
Image Analyst
on 2 Jan 2015
If, like I do, you have trouble figuring out complicated regexp expressions like '[^/\\]+(?=[/\\]?$)' , or would take too much time figuring that out, then you can use John D'Errico's incredibly handy and easy-to-use utility called allwords http://www.mathworks.com/matlabcentral/fileexchange/27184-allwords. It splits up the string into separate words and gives you control over the word separators. Here is some code that I think you'll find a lot easier to use and remember to use than those cryptic regexp expressions:
workfolder='C:\Users\Jorge\Desktop\Work_Christmas\Measurements\rpm_measurements\rpm0800\';
subFolders = allwords(workfolder, '\')
deepestFolder = subFolders{end}
I left off the semicolons at the end of the lines so you can see what it produces in the command window:
subFolders =
'C:' 'Users' 'Jorge' 'Desktop' 'Work_Christmas' 'Measurements' 'rpm_measurements' 'rpm0800'
deepestFolder =
rpm0800
What do you think, Peter? Is allwords() easier/simpler? Which do you prefer?
Stephen23
on 2 Jan 2015
It is true that Regular Expressions have a rather cryptic syntax and can take a while to master, however they are a powerful tool that can be met in many different programming languages, and thus they are well worth the effort of learning. The fact that regexp is inbuilt means your code remains portable, without relying on any third-party functions (and licences...)
The example that Image Analyst gives above could also be achieved using standard MATLAB regexp:
>> regexp(workfolder,'\w+','match')
ans = {'C','Users','Jorge','Desktop','Work_Christmas','Measurements','rpm_measurements','rpm0800'}
Users wanting to practice and learn about Regular Expressions can try my compact Regular Expression Helper, which opens a figure and uses real-time updating of regexp's inputs and outputs to allow endless experimentation and refining of Regular Expressions:
See Also
Categories
Find more on Entering Commands in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!