Класс: io.reader
Пакет: iO
Получите имена для данных, импортированных с помощью пользовательского читателя
retName = getName(obj)
возвращает имя, чтобы использовать в Simulation Data Inspector для или иерархического узла сигнала в данных, импортированных из рабочей области или файла.retName
= getName(obj
)
obj
— Пользовательское средство чтения данныхio.reader
объект подклассаПользовательское средство чтения данных в виде объекта класса, который наследовался io.reader
базовый класс.
Пример: MyCustomFileReader
retName
— Имя сигналаИмя сигнала используется 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
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.