Naming individual fields in a struct

2 次查看(过去 30 天)
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?

采纳的回答

Walter Roberson
Walter Roberson 2014-2-24
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 个评论
mashtine
mashtine 2014-2-24
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 2014-2-24
编辑:Walter Roberson 2014-2-24
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.

请先登录,再进行评论。

更多回答(1 个)

Image Analyst
Image Analyst 2014-2-24
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

类别

Help CenterFile Exchange 中查找有关 Data Type Conversion 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by