Naming individual fields in a struct

2 vues (au cours des 30 derniers jours)
mashtine
mashtine le 24 Fév 2014
Hi everyone,
I have this block of code:
HWFiles = {'midas_wind_197901-197912.txt',............'midas_wind_201301-201312.txt'};
for k=1:numel(HWFiles);
fid = fopen(HWFiles{k}, 'r');
tmp = textscan(fid,'%s %*s %*f %*f %*s %*f %f %*f %f %f %f %f %f %*f %*f %*f %*f %*f %*f %*f %*f %*s %*f', 'Delimiter',',');
HWData(k).data = tmp ;
fclose(fid);
end
Not pasting well sorry. HWData becomes a 1 x 35 struct and I wanted to change each field name to the year from the file, eg 1979, 1980 .... 2013. Any ideas with this?

Réponse acceptée

Walter Roberson
Walter Roberson le 24 Fév 2014
Are you asking to create a structure of length 1, HWData, with field names 1979, 1980, and so on? If so then you cannot do that as field names must start with a letter. If you wanted to be able to look up by year then you could use a common prefix such as 'Y', so Y1979, Y1980, and so on. Or you could use containers.map
TO use the prefix,
prefix = 'Y';
and in the loop,
filename = HWFiles{k};
underpos = find(filename, '_', 1, 'last');
fieldname = [prefix filename(underpos+1:underpos+3)];
HWData.(fieldname) = tmp;
  5 commentaires
mashtine
mashtine le 24 Fév 2014
However, I believe indexing this in a loop to manipulate and work with the data is probably a bit too complicated (or perhaps I just don't know it yet)
Walter Roberson
Walter Roberson le 24 Fév 2014
Modifié(e) : Walter Roberson le 24 Fév 2014
Opps, should have had
underpos = find(filename == '_', 1, 'last');
Indexing by a non-consecutive number (eg. year) to work in a loop is going to be very nearly as much trouble.
Recall that you can use fieldnames() to get the names of the fields. And sort() of a cell array of strings would give the fieldnames sorted numerically provided they were all the same length.

Connectez-vous pour commenter.

Plus de réponses (1)

Image Analyst
Image Analyst le 24 Fév 2014
If you have R2013b, why not use a table. You can use struct2table to convert your structure to a possibly more convenient table. Table is a brand new data type. http://www.mathworks.com/help/matlab/ref/struct2table.html
  1 commentaire
mashtine
mashtine le 24 Fév 2014
I wish I could but I am stuck with R2010 unfortunately.

Connectez-vous pour commenter.

Catégories

En savoir plus sur Structures dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by