Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

getName

クラス: io.reader
パッケージ: io

カスタム リーダーを使用してインポートされたデータの名前を取得する

構文

retName = getName(obj)

説明

retName = getName(obj) は、ワークスペースまたはファイルからインポートされたデータ内の信号または階層ノードに対してシミュレーション データ インスペクターで使用する名前を返します。

入力引数

すべて展開する

カスタム データ リーダー。io.reader 基底クラスから継承されるクラスのオブジェクトとして指定します。

例: MyCustomFileReader

出力引数

すべて展開する

シミュレーション データ インスペクターで使用される信号名。文字配列として返されます。

属性

Abstracttrue

メソッドの属性の詳細については、メソッドの属性を参照してください。

すべて展開する

ファイルからインポートされた信号の名前を返すように getName メソッドの関数定義を記述します。この例のカスタム リーダーは階層構造をもつファイルからデータをインポートし、ファイルを最上位ノードとして扱います。クラス定義ファイル内で getName メソッドのコードを指定します。

この例では完全なクラス定義は示しません。すべてのカスタム リーダーは getNamegetTimeValues、および getDataValues メソッドの動作を定義しなければなりません。完全なクラス定義およびインポート ワークフローを示す例については、カスタム ファイル リーダーを使用したデータのインポートを参照してください。

この例では、getName メソッドおよび getChildren メソッドが連携し、適切な名前をインポートされた各信号に割り当てます。getChildren メソッドは関数 readtable を使用してファイルからデータを読み取ります。次にメソッドはファイルから読み取られる各信号のカスタム リーダー オブジェクトが含まれる cell 配列を作成します。

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 メソッドのコードを指定します。

この例では完全なクラス定義は示しません。すべてのカスタム リーダーは getNamegetTimeValues、および 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 で導入