首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何从单元格生成结构字段名

如何从单元格生成结构字段名
EN

Stack Overflow用户
提问于 2012-12-19 03:43:50
回答 1查看 254关注 0票数 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和3-2的单元格数组

我需要结构的字段名为a(1)或a(2),但不幸的是matlab给了我错误。原因是我需要检查例如a(1)是否已经是一个结构字段名,我将这些值连接到以前的值;如果不是,则使用尊重的值创建一个新的字段名。代码是:

代码语言:javascript
运行
复制
[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 
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-19 05:36:20

假设您希望s作为具有字段3-1、3-2、...、3-n的结构。我也认为你想用MATLAB的dynamic field names来创建。

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

代码语言:javascript
运行
复制
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替换连字符,如

name(a,'-','_');

  • Appending a a,‘-’,a=strrep(a,‘-’,在字段名称开头加上一个字母

str (@(Str) 'a_‘字符串,a,'uniformoutput',0)

这项工作可以在完成将文件读入矩阵a、x和y之后立即完成

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13940318

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档