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