我有一个需要读入matlab的文本文件。我想使用结构在Matlab中实现类似于java LinkedHashMap的东西。我的文本文件是这样的
3-1 33.33 37.58
3-1 66.67 20.47
3-2 33.33 41.64
3-2 66.67 24.42
我将整个文件读入数组[a,x,y]
,其中a是包含3-1和3-2的单元格数组
我需要结构的字段名为a(1)或a(2),但不幸的是matlab给了我错误。原因是我需要检查例如a(1)是否已经是一个结构字段名,我将这些值连接到以前的值;如果不是,则使用尊重的值创建一个新的字段名。代码是:
[a,x,y]=textread('mytxt.txt', '%q%f%f','commentstyle','matlab');
s.a(1)=[x(1),y(1)];
for j=2:length(a)
if isfield(s,a(1))==0
s.a(j)=[x(j),y(j)];
else
temp = s.a(j);
C = concat(1,temp,[x(j),y(j)];
s.a(j) = C
end
end
发布于 2012-12-19 05:36:20
假设您希望s作为具有字段3-1、3-2、...、3-n的结构。我也认为你想用MATLAB的dynamic field names来创建。
要通过单元格数组a中的单元格动态访问字段,您需要执行类似以下操作:
s.(a{j}) = [x(j), y(j)];
记下括号()和大括号{}的不同用法。括号用于指示动态字段名,如s.( str )中的,其中str是字符数组。大括号用于索引单元格数组a,因为a{j}中给出了a中第j个单元格的字符数组。
最后,您建议的字段名称(3-1,3-2,...等)不是合法的MATLAB字段名,因为有连字符'-‘,而且它们不以字母a-zA-Z开头。因此,您需要将连字符替换为另一个字符,例如下划线,并在建议的字段名的开头附加一个字母。
name(a,'-','_');
str (@(Str) 'a_‘字符串,a,'uniformoutput',0)
这项工作可以在完成将文件读入矩阵a、x和y之后立即完成
https://stackoverflow.com/questions/13940318
复制相似问题