Импорт данных с помощью пользовательского средства чтения файлов

Когда вы хотите визуализировать данные, хранящиеся в формате данных или файла, Данные Моделирования Inspector не поддерживает, можно использовать io.reader класс, чтобы записать свой собственный пользовательский инструмент чтения файлов для Данные Моделирования Inspector. Этот пример объясняет части определения класса для пользовательского средства чтения файлов и демонстрирует, как зарегистрировать устройство чтения в Данные Моделирования Inspector. Откройте ExcelFirstColumnTimeReader.m файл для просмотра полного определения класса.

Напишите определение класса для пользовательского считывателя

Напишите определение класса, которое задает, как ваш пользовательский считыватель извлекает соответствующие данные и метаданные из файлов и переменных, которые используют пользовательские форматы. Сохраните файл определения класса в расположении на MATLAB™ пути.

Пользовательская программа чтения в этом примере использует readtable функция для загрузки данных из файла Microsoft Excel™ и использует первый столбец в файле в качестве временных данных.

Определение класса начинается с наследования от io.reader класс, за которым следуют определения методов, которые возвращают требуемые и релевантные данные и метаданные.

classdef ExcelFirstColumnTimeReader < io.reader

Каждый пользовательский считыватель должен задать getName, getTimeValues, и getDataValues методы. Дополнительные методы доступны для доступа к некоторым метаданным, которые могут существовать в пользовательском файле. Определение класса для этого примера задает абстрактные методы, а также supportsFile и getChildren методы.

The supportsFile метод проверяет содержимое файла, чтобы убедиться, что файл содержит сигнальные данные.

function supported = supportsFile(~,filename)
    try
        t = readtable(filename);
        supported = height(t) > 0 && numel(t.Properties.VariableNames) > 1;
    catch
        supported = false;
    end
end

Чтобы импортировать несколько сигналов из файла, обработайте данные как иерархические с файлом, являющимся верхним узлом. Читатель использует getChildren метод для создания ExcelFirstColumnTimeReader объект для каждого сигнала в файле.

function childObj = getChildren(obj)
    childObj = {};
    if isempty(obj.VariableName)
        t = readtable(obj.FileName);
        vars = t.Properties.VariableNames;
        vars(1) = [];
        childObj = cell(size(vars));
        for idx = 1:numel(vars)
            childObj{idx} = ExcelFirstColumnTimeReader;
            childObj{idx}.FileName = obj.FileName;
            childObj{idx}.VariableName = vars{idx};
        end
    end
end

The getTimeValues метод считывает данные в файле с помощью readtable и возвращает данные в первом столбце для использования Данных моделирования Inspector в качестве временных данных.

function timeVals = getTimeValues(obj)
    timeVals = [];
    if ~isempty(obj.VariableName)
        t = readtable(obj.FileName);
        timeName = t.Properties.VariableNames{1};
        timeVals = t.(timeName);
    end
end

The getName метод использует имя файла в качестве имени для узла верхнего уровня импортированных данных. Сигналы называются с помощью VariableName свойство для соответствующего ExcelFirstColumnTimeReader объект, возвращенный getChildren способ.

function retName = getName(obj)
    if isempty(obj.VariableName)
        fullName = obj.FileName;
        [filepath,name,ext] = fileparts(fullName);
        retName = strcat(name,ext);
    else
        retName = obj.VariableName;
    end
end

The getDataValues метод возвращает данные в каждом столбце, который имеет данные, кроме первого, как данные о сигнале. Доступ к данным для каждого сигнала осуществляется с помощью VariableName свойство для соответствующего объекта, возвращенного getChildren способ.

function dataVals = getDataValues(obj)
    dataVals = [];
    if ~isempty(obj.VariableName)
        t = readtable(obj.FileName);
        dataVals = t.(obj.VariableName);
    end
end

Зарегистрируйте пользовательский Reader для Данных моделирования Inspector

После записи файла определения класса для пользовательского устройства чтения данных необходимо зарегистрировать устройство чтения в Данные Моделирования Inspector, прежде чем использовать его для импорта данных. Данные моделирования Inspector не хранит зарегистрированные считыватели между сеансами работы с MATLAB, поэтому необходимо зарегистрировать пользовательский считыватель в начале каждого нового сеанса работы с MATLAB. Можно зарегистрировать пользовательский считыватель, чтобы считать данные из рабочей области или чтобы считать данные из файла. Чтобы зарегистрировать средство чтения файлов в этом примере, используйте registerFileReader способ.

registerFileReader(ExcelFirstColumnTimeReader,[".xlsx" "xls"]);

Чтобы подтвердить, что программа чтения файлов зарегистрирована, используйте io.reader.getRegisteredFileReaders способ.

io.reader.getRegisteredFileReaders
ans = 
"ExcelFirstColumnTimeReader"

Импорт данных из файла в пользовательском формате

После регистрации пользовательского средства чтения файлов можно импортировать данные из файла в пользовательском формате с помощью пользовательского интерфейса Данные Моделирования Inspector или с помощью Simulink.sdi.createRun функция. Этот пример импортирует простой набор данных из файла, который содержит четыре столбца данных. Средство чтения пользовательских файлов в этом примере всегда загружает первый столбец, в этом случае a, как временные данные.

Чтобы импортировать данные с помощью пользовательского интерфейса, откройте Данные моделирования Inspector. Можно использовать Simulink.sdi.view чтобы открыть Данные моделирования Inspector из Командного окна MATLAB. Затем нажмите кнопку Импорт.

В диалоговом окне Import выберите опцию File и импортируйте данные из файла в новый запуск. Щелкните папку, чтобы просмотреть файловую систему и выбрать файл, который вы хотите импортировать. Файл для этого примера называется CustomFile.xlsx.

После выбора файла с расширением, соответствующим одному или нескольким зарегистрированным пользовательским считывателям, в диалоговом окне появится опция выбора считывателя, который необходимо использовать. В этом примере можно выбрать между встроенным средством чтения файлов Microsoft Excel или пользовательским средством чтения, написанным для этого примера. По умолчанию настраиваемая программа чтения выбирается, когда она доступна для расширения выбранного файла.

Можно выбрать сигналы, которые вы хотите импортировать из файла. После выбора нажмите кнопку Импорт. Данные импортируются в новый запуск с именем Imported_Data.

Для программного импорта данных можно использовать Simulink.sdi.createRun функция. В Данные моделирования Inspector встроена программа чтения файлов Microsoft Excel. Можно указать, какой считыватель использовать для импорта данных в вызове в Simulink.sdi.createRun функция. Когда вы не задаете считыватель, который хотите использовать для импорта данных, Данные Моделирования Inspector используют первый пользовательский считыватель, поддерживающий расширение файла.

Simulink.sdi.createRun('Custom File Run','file','CustomFile.xlsx','ExcelFirstColumnTimeReader');

Просмотр и анализ импортированных данных

После импорта данных можно использовать Simulation Data Inspector, чтобы проверить и проанализировать импортированные данные самостоятельно или вместе со связанными данными моделирования.

См. также

Классы

Функции

Похожие темы