getName

Класс: io.reader
Пакет: io

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

Синтаксис

retName = getName(obj)

Описание

retName = getName(obj) возвращает имя, используемое в Simulation Data Inspector для сигнала или иерархического узла в данных, импортированных из рабочей области или файла.

Входные параметры

расширить все

Настраиваемая программа чтения данных, заданная как объект класса, который наследует от io.reader базовый класс.

Пример: MyCustomFileReader

Выходные аргументы

расширить все

Имя сигнала, используемое Simulation Data Inspector, возвращается как символьный массив.

Признаки

Abstracttrue

Чтобы узнать об атрибутах методов, см. «Атрибуты метода».

Примеры

расширить все

Напишите определение функции для getName метод для возврата имен для сигналов, импортированных из файла. Пользовательская программа чтения в этом примере импортирует данные из файла с иерархической структурой, рассматривая файл как верхний узел. Задайте код для getName метод в файле определения класса.

Этот пример не показывает полное определение класса. Все пользовательские считыватели должны задать поведение для getName, getTimeValues, и getDataValues методы. Пример, показывающий полное определение класса и рабочий процесс импорта, см. в разделе Импорт данных с использованием пользовательского средства чтения файлов.

В этом примере getName и getChildren методы работают вместе, чтобы присвоить соответствующее имя каждому импортированному сигналу. The getChildren метод считывает данные из файла, используя readtable функция. Затем метод создает массив ячеек, который содержит пользовательский объект считывателя для каждого сигнала, считанного из файла.

The getName метод использует FileName свойство пользовательского объекта reader, чтобы вернуть имя файла в качестве имени для узла верхнего уровня. The getName метод использует VariableName свойство для возврата имени сигнала, извлеченного из файла, для использования в качестве имени сигнала для каждого импортированного сигнала.

classdef ExcelFirstColumnTimeReader < io.reader
  methods
    % ...

    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
    
    function retName = getName(obj)
    if isempty(obj.VariableName)
        fullName = obj.FileName;
        splitName = split(fullName,["\" "/"]);
        retName = splitName{end};
    else
        retName = obj.VariableName;
    end

  % ...
  end
end 

Напишите определение функции для getName метод для возврата имен сигналов для данных, импортированных из рабочей области. Задайте код для getName метод в файле определения класса.

Этот пример не показывает полное определение класса. Все пользовательские считыватели должны задать поведение для getName, getTimeValues, и getDataValues методы и устройства чтения данных рабочей области должны определить supportsVariable способ. Пример, показывающий полное определение класса и рабочий процесс импорта для устройства чтения данных рабочей области, см. в разделе Импортировать переменные рабочей области с использованием пользовательского устройства чтения данных.

Пользовательский считыватель в этом примере импортирует структуру или массив структур из рабочей области. Структуры должны содержать поля для данных сигнала (d), временные данные (t) и имя сигнала (n). Когда импортируемая переменная является скалярной структурой, getName метод возвращает значение в n поле импортированной структуры.

Когда переменная является массивом структур, пользовательский считыватель использует обе getName и getChildren методы для возврата имен сигналов. The getChildren метод создает пользовательский объект reader для каждой структуры массива и устанавливает ChannelIndex свойство для идентификации индекса данных сигнала в массиве. Затем, getName метод использует ChannelIndex значение свойства, чтобы выбрать соответствующую структуру из VariableValue значение свойства, которое является массивом структур.

classdef SimpleStructReader < io.reader
  
  properties
    ChannelIndex
  end

  methods
    % ...

    function childObj = getChildren(obj)
      childObj = {};
      if ~isscalar(obj.VariableValue) && isempty(obj.ChannelIndex)
        numChannels = numel(obj.VariableValue);
        childObj = cell(numChannels,1);
        for idx = 1:numChannels
          childObj{idx} = SimpleStructReader;
          childObj{idx}.VariableName = sprintf('%s(%d)',obj.VariableName,idx);
          childObj{idx}.VariableValue = obj.VariableValue;
          childObj{idx}.ChannelIndex = idx;
        end
      end
    end
    
    function retName = getName(obj)
      if isscalar(obj.VariableValue)
        retName = char(obj.VariableValue.n);
      elseif ~isempty(obj.ChannelIndex)
        varVal = obj.VariableValue(obj.ChannelIndex);
        retName = char(varVal.n);
      else
        retName = 'Signal Array';
      end
    end

  % ...
  end
end 
Введенный в R2020b