Класс: io.reader
Пакет: io
Получение имен для данных, импортированных с помощью пользовательского средства чтения
retName = getName(obj)
возвращает имя, используемое в инспекторе данных моделирования для сигнального или иерархического узла в данных, импортированных из рабочей области или файла.retName = getName(obj)
obj - Пользовательское средство чтения данныхio.reader объект подклассаПользовательское средство чтения данных, указанное как объект класса, который наследует от io.reader базовый класс.
Пример: MyCustomFileReader
retName - Наименование сигналаИмя сигнала, используемое инспектором данных моделирования, возвращаемое в виде символьного массива.
Запишите определение функции для 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. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.