more efficient way to use strtok / selecting parts of a string

Greetings,
I have a huge cell array with time data arranged in the following format :
[one empty cell];
ABC/DEF QTR/3/99 (Thousands);
ABC/DEF QTR/6/99 (Thousands);
ABC/DEF QTR/9/99 (Thousands);
ABC/DEF QTR/12/99 (Thousands);
etc...
I would like to change the format into this :
ABC/DEF;
QTR/3/99;
QTR/6/99;
QTR/9/99;
QTR/12/99;
etc...
I've solved the problem but think it can be done much more efficiently:
[varname, mthtime2(2:end)] = strtok(mthtime2(2:end));
mthtime2(2:end)= strtok(mthtime2(2:end));% drops the "thousands" mthtime2(1)=varname(1);
Suggestions for a faster method would be most appreciated. Thank you for your time!
Iliya

2 Comments

Is the mthtime2(1)=varname(1) commented out, or should it be on the next line?
In order to get what iilya wants, mthtime2(1)=varname(1) needs to be uncommented.

Sign in to comment.

 Accepted Answer

If the format is as rigid as your example ...
Given a cell array
x = {[]; 'ABC/DEF QTR/3/99 (Thousands)'; 'ABC/DEF QTR/6/99 (Thousands)'; 'ABC/DEF QTR/9/99 (Thousands)'; 'ABC/DEF QTR/12/99 (Thousands)'};
Then for each element
y = x{i};
you want
y(9:17);
and then need to deal with the possible blank space. The function deblank can handle this. Putting it all together ...
x = {[]; 'ABC/DEF QTR/3/99 (Thousands)'; 'ABC/DEF QTR/6/99 (Thousands)'; 'ABC/DEF QTR/9/99 (Thousands)'; 'ABC/DEF QTR/12/99 (Thousands)'};
[{'ABC/DEF'};cellfun(@(y)(deblank(y(9:17))), x(2:end), 'UniformOutput', false)]
edit to handle variable ABC/DEF
firstCell = x{2};
[{firstCell(1:7)};cellfun(@(y)(deblank(y(9:17))), x(2:end), 'UniformOutput', false)]

More Answers (0)

Categories

Find more on Scripts 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!