我有一个需要读入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 ad 3-2的单元格数组
我需要结构将其字段名称设置为(1)或(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
答案 0 :(得分:2)
据推测,您希望将 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个单元格的字符数组。 / p>
最后,你提出的字段名称( 3-1,3-2,... 等)不是合法的MATLAB字段名,因为连字符' - '并且它们没有开始用一封信, [a-zA-Z] 。因此,您需要将连字符替换为另一个字符,例如下划线,并在建议的字段名称的开头附加一个字母。
使用 strrep 替换连字符,如
α= strrep(一, ' - ', '_');
在字段名称的开头附加一个字母
a = cellfun(@(str)['a_'str],a,'uniformoutput',0)
这项工作可以在您将文件读入矩阵后立即完成 a , x 和 y