0

我有一个需要读入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 的单元格数组

我需要结构的字段名称为 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 
4

1 回答 1

2

大概您希望将s作为具有字段3-1, 3-2, ..., 3-n的结构。我还认为您想使用 MATLAB 的动态字段名称进行创建。

要通过单元格数组a中的单元格动态访问字段,您需要执行以下操作:

s.(a{j}) = [x(j), y(j)];

记下括号()和大括号{}的不同用法。括号用于指示动态字段名称,如s.(str)其中str是字符数组。大括号用于对单元格数组a进行索引,因为a{j}给出了 a 中第 j 个单元格字符数组。

最后,您建议的字段名称(3-1、3-2、...等)不是合法的 MATLAB 字段名称,因为连字符“-”并且它们不以字母开头,[a-zA-Z ] . 因此,您需要将连字符替换为另一个字符,例如下划线,并将一个字母附加到建议的字段名称的开头。

  1. 使用strrep替换连字符,如

    a=strrep(a,'-','_');

  2. 在字段名称的开头附加一个字母

    a=cellfun(@(str) ['a_' str],a,'uniformoutput',0)

这项工作可以在您将文件读入矩阵axy后立即完成

于 2012-12-18T21:36:20.020 回答