exponenta event banner

getName

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

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

Синтаксис

retName = getName(obj)

Описание

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

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

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

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

Пример: MyCustomFileReader

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

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

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

Признаки

Abstracttrue

Сведения об атрибутах методов см. в разделе Атрибуты метода.

Примеры

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

Запишите определение функции для 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