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

时间:2009-10-28 15:29:38

标签: matlab yaml

我想使用YAML跨多种语言传达一些数据。 (将其视为“与语言无关的序列化”。)其中一种语言是MATLAB,但我似乎找不到该语言的YAML库。我在Google上检查过“matlab yaml”和“matlab yaml parse”,似乎没有任何相关结果。在MATLAB Central上搜索“yaml”也让我空手而归。

是否真的没有适用于MATLAB的YAML库?我写的很好,但我想避免重复工作。 (也许要分享一些东西?)

7 个答案:

答案 0 :(得分:7)

我扩展了Jan的代码以支持更多数据类型以及将matlab结构写入yaml文件。它不仅仅是一个m文件,因此我找到http://code.google.com/p/yamlmatlab/上的来源 伊日

答案 1 :(得分:3)

从Matlab调用现有的Java YAML导入库。这应该是非常明确的。 Java-Matlab互操作性非常好,请参阅matlab帮助。

答案 2 :(得分:3)

我相信,以下示例可以节省一些时间。

首先,您需要使用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
祝你好运, 扬

答案 3 :(得分:3)

现在有一个针对snakeyaml的matlab包装器:

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

我已经尝试过,它在一个简单的yaml文件上工作得很好。如果yaml字段名称不是有效字段名称且字符串为空,则存在错误。我在谷歌代码网站的问题部分提出了这两个方法的解决方法

答案 4 :(得分:1)

@AndyL 对于sankeyaml,将它添加到你的javapath,然后导入('org.yaml.snakeyaml.Yaml'),它就像文档一样;生成的LinkedHashMap或多或少像matlab结构一样被访问。

答案 5 :(得分:0)

Geoffr Adams还有一个名为mat-yaml的MEX实现,其中libyaml解析器 - 发射器的C绑定。“

但它还无法在Windows上编译。

答案 6 :(得分:0)

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