代码之家  ›  专栏  ›  技术社区  ›  Benjamin Oakes

是否已经有一个用于matlab的yaml库/解析器?

  •  9
  • Benjamin Oakes  · 技术社区  · 15 年前

    我想使用yaml跨多种语言通信一些数据。(把它看作是“独立于语言的序列化”)其中一种语言是matlab,但我似乎找不到该语言的yaml库。我在谷歌上查过“matlab yaml”和“matlab yaml parse”,似乎没有任何相关的结果。在Matlab Central上搜索“yaml”也让我空手而归。

    是否真的没有用于matlab的yaml库?我可以写一篇,但我想避免重复工作。(也许有什么可以分享的?)

    7 回复  |  直到 8 年前
        1
  •  7
  •   Community CDub    8 年前

    我扩展 Jan 的代码支持更多的数据类型,并将matlab结构写入yaml文件。它不只是一个M文件,因此我找到了 http://code.google.com/p/yamlmatlab/ 吉里

        2
  •  3
  •   Mikhail Poda    15 年前

    调用来自MATLAB的现有Java YAML导入库。这应该是相当激烈的。Java Matlab的互操作性相当不错,请看MATLAB帮助。

        3
  •  3
  •   Marc    13 年前

    现在有一个用于snakeyaml的matlab包装器:

    http://code.google.com/p/yamlmatlab/

    我已经试过了,它在一个简单的yaml文件上工作得很好。如果yaml字段名无效,并且字符串为空,则会出现错误。我在谷歌代码网站的“问题”部分建议了这两个问题的解决方法。

        4
  •  3
  •   Kyle Simek    11 年前

    我相信下面的例子可以节省一些时间。

    首先,您需要使用snake yaml加载yaml文档:

    javaaddpath C:\temp\snakeyaml-1.7.jar
    import('org.yaml.snakeyaml.Yaml')
    
    yamlreader = Yaml();
    yml = fileread('C:\temp\test.yml');
    jymlobj = yamlreader.load(yml);
    

    然后,您需要访问Java对象的数据,我使用下面的例程来执行它(注意,这不是一般的例程,它是针对特定类型的YAML文件开发的,例如在Matlab中定义矩阵)。

    function Data = Hash2Struct(hashMap)
    
      Data = [];
    
      iterator = hashMap.keySet().iterator();
      while (iterator.hasNext())
         field = iterator.next();
         if ~isempty(field)
            d =  hashMap.get(field);
            switch class(d)
                case {'java.util.LinkedHashMap'}
                    Data.(field) = Hash2Struct(d);
                case {'java.util.ArrayList'}
                   Data.(field) = str2num(d.toString);               
                otherwise    
                    Data.(field) = d;
            end
         end
      end
    

    祝你好运, 简

        5
  •  1
  •   natto    15 年前

    @ AndyL 对于sankeyalm,将其添加到javapath中,然后导入(“org.yaml.snakeyaml.yaml”),它的工作方式与docs类似;生成的linkedhashmap的访问方式或多或少类似于matlab结构。

        6
  •  0
  •   Yauhen Yakimovich    11 年前

    还有一个由geoffr-adams实现的MEX称为 mat-yaml 带C绑定 libyaml 解析器发射器)。

    但它还不能在Windows上编译。

        7
  •  0
  •   ahmetsacan    10 年前

    ZozaniDB Database Toolbox 包括针对yaml的matlab本机实现(作为p文件分发)。

    >> s=yaml_dump(struct('name','apple','calories',53))
    
      s =
    
    name: apple
    calories: 53
    
    >> yaml_parse(s)
    
    ans = 
            name: 'apple'
        calories: 53