getName

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

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

Синтаксис

retName = getName(obj)

Описание

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

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

развернуть все

Пользовательское средство чтения данных в виде объекта класса, который наследовался io.reader базовый класс.

Пример: MyCustomFileReader

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

развернуть все

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

Примеры

развернуть все

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

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

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

getName метод использует FileName свойство пользовательского читателя возражает, чтобы возвратить имя файла как имя для узла верхнего уровня. 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 методы, чтобы возвратить имена сигнала. getChildren метод создает пользовательский объект читателя для каждой структуры в массиве и устанавливает 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