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

1 view (last 30 days)
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
Walter Roberson
Walter Roberson on 28 Jan 2012
Is the mthtime2(1)=varname(1) commented out, or should it be on the next line?
Daniel Shub
Daniel Shub on 28 Jan 2012
In order to get what iilya wants, mthtime2(1)=varname(1) needs to be uncommented.

Sign in to comment.

Accepted Answer

Daniel Shub
Daniel Shub on 28 Jan 2012
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 Cell Arrays 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!