Класс: 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
методы работают вместе, чтобы присвоить соответствующее имя каждому импортированному сигналу. 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
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.