我想使用YAML跨多种语言传达一些数据。 (将其视为“与语言无关的序列化”。)其中一种语言是MATLAB,但我似乎找不到该语言的YAML库。我在Google上检查过“matlab yaml”和“matlab yaml parse”,似乎没有任何相关结果。在MATLAB Central上搜索“yaml”也让我空手而归。
是否真的没有适用于MATLAB的YAML库?我写的很好,但我想避免重复工作。 (也许要分享一些东西?)
答案 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)
答案 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