Уже есть библиотека / парсер YAML для MATLAB? - PullRequest
9 голосов
/ 28 октября 2009

Я хочу использовать YAML для передачи некоторых данных на нескольких языках. (Думайте об этом как о «независимой от языка сериализации».) Одним из этих языков является MATLAB, но я не могу найти библиотеку YAML для этого языка. Я проверил на наличие "matlab yaml" и "matlab yaml parse" в Google, и, похоже, не найдено никаких релевантных результатов. Поиск "yaml" в MATLAB Central также оставил меня с пустыми руками.

Действительно ли не существует библиотеки YAML для MATLAB? Я в порядке с написанием одного, но я хотел бы избежать дублирования работы. (Возможно, чем-то поделиться?)

Ответы [ 7 ]

7 голосов
/ 02 марта 2011

Я расширил код Ян для поддержки большего количества типов данных, а также для записи структуры matlab в файл yaml. Это не просто один m-файл, поэтому я расположил источники на http://code.google.com/p/yamlmatlab/ Иржи

3 голосов
/ 23 июня 2011

Для snakeyaml теперь есть оболочка matlab:

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

Я опробовал его, и он довольно хорошо работает с простым файлом yaml. Существуют ошибки, если имена полей yaml не являются допустимыми именами полей и когда строки пусты. Я предложил способы их решения в разделе вопросов на сайте кода Google

.
3 голосов
/ 09 ноября 2010

Полагаю, что следующий пример может сэкономить время.

Сначала вам нужно загрузить документ 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

Удачи, Jan

3 голосов
/ 28 октября 2009

Вызов существующих библиотек импорта Java YAML из Matlab. Это должно быть довольно просто. Взаимодействие Java-Matlab довольно хорошее, см. Справку по matlab.

1 голос
/ 02 февраля 2010

@ AndyL Для sankeyaml добавьте его в свой javapath, затем импортируйте ('org.yaml.snakeyaml.Yaml'), и это будет работать как документы; Полученный LinkedHashMap более или менее доступен как структура matlab.

0 голосов
/ 14 марта 2015

ZozaniDB Database Toolbox включает в себя реализацию Matlab для YAML (распространяется в виде p-файлов).

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

  s =

name: apple
calories: 53

>> yaml_parse(s)

ans = 
        name: 'apple'
    calories: 53
0 голосов
/ 10 августа 2013

Существует также реализация MEX Джеффра Адамса, которая называется mat-yaml с привязкой C для libyaml анализатор-эмиттер).

Но его пока нельзя скомпилировать в Windows.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...