Apr 062012
 
This entry is part 3 of 13 in the series Matlab基础班附加材料

Struct类型变量是一种结构性很强的数据类型(它本身名字就叫做structure嘛!)。我们可以在Matlab的Workspace里面双击变量,从而在Array Editor里面打开,从而进一步地一层层打开这个变量,但是呢那样很麻烦,还不直观。如果我们遇上一个非常复杂的Struct变量(就像Matlab将XML文件转换为Struct变量中提到的那种可能很复杂的变量),我们希望能够有个工具能够让我们一目了然地看到它内部的结构。

驱车上网,找现成函数。在Matlab Central里面找到一个打印出很fancy的函数,可惜在电脑上出错,而且由于比较复杂,也就没时间去修理它。因此就忽略它。PS,它显示出来的树如下所示:

---第一层
 |---第二层
 | |---第三层
 | | |---第四层

接下来,在网上找到一个相对比较简单易行的函数,然后自己稍微修改一下,就获得比较好的效果了。函数代码如下:

function diginto(thestruct, level)
%display Tree of a variable. Call it directly, diginto();
%From: http://code.activestate.com/recipes/576489-matlab-code-for-displaying-struct-details/
%Modified my http://blog.macro2.org

if nargin < 2
    level = 0;
end

fn = fieldnames(thestruct);
for n = 1:length(fn)
    fprintf('%s%s\n',repmat('   ',1,level),fn{n}); %Modified: for better performance
 
    fn2 = getfield(thestruct,fn{n});
    if isstruct(fn2)
  diginto(fn2, level+1);
    elseif iscell(fn2)&&isstruct(fn2{1}) %Modified: In case of a struct array.
  for h=1:length(fn2)
   diginto(fn2{h},level+1);
  end
 end
end

end

调用的方法很简单,直接 diginto(struct名称) 就行了。

No related posts.

Series Navigation<< Matlab中处理XML文件Matlab处理XML文件之简易版 >>
Bookmark/FavoritesSina WeiboGoogle+FacebookQQTwitterYahoo BookmarksBaiduDiggEmailGoogle GmailOutlook.comEvernotePrintAIMLinkedInBlogger PostKindle ItShare

Related Posts:

  One Response to “Matlab中显示Struct的结构”

  1. [...] 这样的话,对struct的操作就比上一篇里面提到的那种对Java Dom Object的操作要简单一些。唯一的一个难题就是如果遇上很复杂的Struct,我们可能希望能够显示出它的结构。对于这个问题,我们也有解决的办法,主要就是将其按照树状形式显示出来。具体详见博文:XML树状显示 Series Navigation  Posted by Macro2.org at 15:11  Add comments  Tagged with: XML [...]

 Leave a Reply

(required)

(required)


*

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>