Asked by Jason
on 6 May 2011

I have a file name that takes the form: S_1_X_Y where X can be an integer between 1-16, and Y is a letter a,b,c,d.

I want to be able to just replace the number X by a user defined value.

any help greatly appreciated. Thanks

*No products are associated with this question.*

Answer by Oleg Komarov
on 6 May 2011

Accepted Answer

X = 1; Y = 'a'; sprintf('S_1_%d_%s',X,Y)

**EDIT**

str = 'S_1_6_a' x = 3;

regexprep(str,'(_)\d+(_[abcd])', ['$1' sprintf('%d',x) '$2'])

ans = S_1_3_a

Oleg Komarov
on 6 May 2011

Jason
on 6 May 2011

but sometimes the number to be replaced can be single digit 1-9) or double digit 10-16.

Jason
on 6 May 2011

sorry, i didn't realise you code handles this. Thanks

Log in to comment.

Answer by Teja Muppirala
on 6 May 2011

NUM2STR is useful for stuff like this.

Y = {'a' 'b' 'c' 'd'}

for jj = 1:4 for n = 1:9 filename = ['S_1_' num2str(n) '_' Y{jj}] end end

Or alternatively, if you need to have zeros in there like '001', '002', '003' then you can use SPRINTF instead of NUM2STR

n = 7; filename = ['S_1_' sprintf('%03.f',n) '_a']

n = 61; filename = ['S_1_' sprintf('%03.f',n) '_a']

Oleg Komarov
on 6 May 2011

num2str supports the format:

num2str(1,'%03.f')

Jason
on 6 May 2011

sorry, I didn't explain my question clearly. I read in a filename that takes the form S_1_X_Y e.g. S_1_6_a the "a" character can be either a,b,c,d. X can be 1 to 16..

Once this filename is read in as a string, I need to keep it exactly the same, but only change the character X to a different number between 1-16.

Oleg Komarov
on 6 May 2011

I edited my answer. Check it out.

Log in to comment.

Related Content

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn moreOpportunities for recent engineering grads.

Apply Today
## 1 Comment

## Jason (view profile)

Direct link to this comment:https://www.mathworks.com/matlabcentral/answers/6928-file-name-manipulation#comment_14323

Just to add, the "1" in the file name can also be 1,2,3,4.

Log in to comment.