structure containing empty string arrays

Hi, I'm using a structure to hold some text data. The fields of the structure are initialised as cells. However it seems that if the field is left empty then the value is converted to a double meaning I can't consistently index that value. Do I need to specifically test each value or is there a better way? Thanks
x=struct('a',{},'b',{});
x(1).a={'abc' 'bbc'};
x(1).b={'cbc'};
x(2).a={'dbc'};
for iloc=1:2
sprintf('%s,%s\n',...
x(iloc).a{:},...
x(iloc).b{:})
end

Answers (2)

You can use
x=struct('a',{''},'b',{''});
Edit
n=10;
v=arrayfun(@(x) {''},1:n,'un',0)
a=struct('a',v,'b',v)

5 Comments

This nearly works, sadly x(2).b is now type 'char' and x(2).b{:} still doesnt work.
Then use
x=struct('a',{'','',''},'b',{'','',''});
You did not specify the length.
For general case you can use
n=10
v=arrayfun(@(x) '',1:n,'un',0)
a=struct('a',v,'b',v)
Hmm, just spotted a typo in my original question, now corrected. I can't preallocate the structure completely since I don't know how many values I'm going to find. The solution
x=struct('a',{'','',''},'b',{'','',''});
also doesn't work as required
type(x(2).b) = char
Ok, use this, it should work
n=10;
v=arrayfun(@(x) {''},1:n,'un',0)
a=struct('a',v,'b',v)

Sign in to comment.

You should be able to use repmat() to create a cell array of empty strings:
C = repmat({''},10,10)
And then feed this into the struct() constructor.

1 Comment

@Tom, works fine for me:
C = repmat({''},10,10)
S = struct('C',C)
S(10,1).C = 'pi'

Sign in to comment.

Categories

Products

Asked:

on 19 Feb 2013

Community Treasure Hunt

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

Start Hunting!