To Create a Variable with the name of a folder

11 Ansichten (letzte 30 Tage)
Peter
Peter am 2 Jan. 2015
Kommentiert: Stephen23 am 2 Jan. 2015
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 Kommentare
Jan
Jan am 2 Jan. 2015
Do you mean:
new_variable = 'rpm0800'
with the quotes?
Peter
Peter am 2 Jan. 2015
Yes exactly!

Melden Sie sich an, um zu kommentieren.

Akzeptierte Antwort

Stephen23
Stephen23 am 2 Jan. 2015
Bearbeitet: Stephen23 am 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:
  2 Kommentare
Peter
Peter am 2 Jan. 2015
Thank you very much Stephen, it worked
Stephen23
Stephen23 am 2 Jan. 2015
My pleasure!

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Image Analyst
Image Analyst am 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 Kommentare
Image Analyst
Image Analyst am 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
Stephen23 am 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:

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Entering Commands finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by