Effacer les filtres
Effacer les filtres

structure containing empty string arrays

3 vues (au cours des 30 derniers jours)
Tom Wright
Tom Wright le 19 Fév 2013
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

Réponses (2)

Azzi Abdelmalek
Azzi Abdelmalek le 19 Fév 2013
Modifié(e) : Azzi Abdelmalek le 19 Fév 2013
You can use
x=struct('a',{''},'b',{''});
Edit
n=10;
v=arrayfun(@(x) {''},1:n,'un',0)
a=struct('a',v,'b',v)
  5 commentaires
Tom Wright
Tom Wright le 19 Fév 2013
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
Azzi Abdelmalek
Azzi Abdelmalek le 19 Fév 2013
Modifié(e) : Azzi Abdelmalek le 19 Fév 2013
Ok, use this, it should work
n=10;
v=arrayfun(@(x) {''},1:n,'un',0)
a=struct('a',v,'b',v)

Connectez-vous pour commenter.


Sean de Wolski
Sean de Wolski le 19 Fév 2013
Modifié(e) : Sean de Wolski le 19 Fév 2013
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 commentaire
Sean de Wolski
Sean de Wolski le 19 Fév 2013
@Tom, works fine for me:
C = repmat({''},10,10)
S = struct('C',C)
S(10,1).C = 'pi'

Connectez-vous pour commenter.

Catégories

En savoir plus sur Matrix Indexing dans Help Center et File Exchange

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by