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

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

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

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

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

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

classdef ExcelFirstColumnTimeReader < io.reader

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

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

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

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

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

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

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

Укажите пользовательского читателя для инспектора данных моделирования

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

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

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

io.reader.getRegisteredFileReaders
ans = 
"ExcelFirstColumnTimeReader"

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

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

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

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

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

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

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

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

Смотрите и анализируйте импортированные данные

После импортирования ваших данных можно использовать Инспектора Данных моделирования, чтобы смотреть и анализировать импортированные данные самостоятельно или вместе со связанными данными моделирования.

Смотрите также

Классы

Функции

Похожие темы