Main Content

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

getDataValues

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

カスタム リーダーを使用してインポートされたデータのデータ値を返す

構文

dataVals = getDataValues(obj)

説明

dataVals = getDataValues(obj) はカスタム ファイルまたはワークスペース変数リーダーを使用して、シミュレーション データ インスペクターにインポートされたデータで使用するデータ値を返します。getDataValues メソッドのコードを指定して、独自のファイルまたは変数形式から信号値を抽出します。

入力引数

すべて展開する

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

例: MyCustomFileReader

出力引数

すべて展開する

信号値。数値、列挙値、logical 値、string 値の配列として返されます。スカラー信号および幅広い信号の場合、配列の最初の次元が時間と一致し、getTimeValues で返される時間ベクトルの長さと一致しなければなりません。多次元信号の場合、最後の次元が時間と一致し、getTimeValues で返される時間ベクトルの長さと一致しなければなりません。

属性

Abstracttrue

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

すべて展開する

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

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

この例では、getChildren メソッドは関数 readtable を使用してデータを読み取り、ファイルおよびファイル内の各信号に対応する最上位ノードのカスタム リーダー オブジェクトの配列を返します。次に、getDataValues メソッドは関数 readtable を使用してデータを読み取り、各カスタム リーダー オブジェクトの 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 dataVals = getDataValues(obj)
    dataVals = [];
      if ~isempty(obj.VariableName)
        t = readtable(obj.FileName);
        dataVals = t.(obj.VariableName);
      end
    end

  % ...
  end
end

ワークスペース変数から信号値を返すように getDataValues メソッドの関数定義を記述します。クラス定義ファイル内で getDataValues メソッドにより実行されるコードを指定します。

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

この例のカスタム リーダーはワークスペースから構造体または構造体の配列をインポートします。構造体には信号データ (d)、時間データ (t)、および信号名 (n) のフィールドが含まれていなければなりません。インポートする変数がスカラー構造体の場合、getDataValues メソッドは構造体の d フィールドからデータを返します。

変数が構造体の配列の場合、カスタム リーダーはデータのインポートに getDataValues メソッドと getChildren メソッドの両方を使用します。getChildren メソッドは配列内の各構造体に対してカスタム リーダー オブジェクトを作成し、配列内の信号データのインデックスを特定する ChannelIndex プロパティを設定します。次に、getDataValues メソッドは 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 dataVals = getDataValues(obj)
      if isscalar(obj.VariableValue)
        dataVals = obj.VariableValue.d;
      elseif ~isempty(obj.ChannelIndex)
        varVal = obj.VariableValue(obj.ChannelIndex);
        dataVals = varVal.d;
      else
        dataVals = [];
      end
    end

  % ...
  end
end
R2020b で導入