Main Content

supportsVariable

クラス: io.reader
名前空間: io

カスタム リーダーが変数をサポートするかどうかの論理インジケーターを返す

R2020b 以降

構文

supported = supportsVariable(obj,var)

説明

supported = supportsVariable(obj,var) は、obj で指定されたカスタム ワークスペース リーダーが var で指定された変数をサポートするかどうかを示す logical 値 supported を返します。カスタム ワークスペース リーダーを記述する場合は、クラス定義に supportsVariable メソッドを実装しなければなりません。

入力引数

すべて展開する

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

例: MyCustomReader

インポートするワークスペース変数。ベース ワークスペースの変数として指定します。

例: myVar

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string | struct | table | cell | categorical | datetime | duration | calendarDuration | fi
複素数のサポート: あり

出力引数

すべて展開する

カスタム リーダーが変数をサポートするかどうか。logical 値として返されます。

すべて展開する

リーダーが入力変数をインポートできる場合にのみ true を返すように supportsVariable メソッドの関数定義を記述します。クラス定義ファイル内で supportsVariable メソッドのコードを指定します。

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

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

  1. 入力変数は、適切なフィールドを含む構造体または構造体の配列である。

  2. 各構造体の n フィールドに、信号名を表す文字配列または string が含まれる。

  3. 各構造体の t フィールドは、double データの列ベクトルである。

  4. 各構造体の d フィールドに t フィールドと同じサイズの数値データが含まれている (つまり、各タイム ステップのサンプル値が存在する)。

classdef ExcelFirstColumnTimeReader < io.reader

  methods
    % ...

    function supported = supportsVariable(~, val)
      % Support structure with fields t (time), d (data), and n (name)
      supported = ...
        isstruct(val) && ...
        isfield(val,'t') && ...
        isfield(val,'d') && ...
        isfield(val,'n');
      if supported
        for idx = 1:numel(val)
          varName = val(idx).n;
          time = val(idx).t;
          varData = val(idx).d;
                    
          % Name must be string or character array
          if ~ischar(varName) && ~isstring(varName)
            supported = false;
            
          % Time must be double column vector
          elseif ~isa(time,'double') || ~iscolumn(time)
            supported = false;

          % Data size must match time size
          else
            timeSz = size(time);
            dataSz = size(varData);
                        
            if ~isnumeric(varData) || ~isequal(dataSz, timeSz)
                    supported = false;
            end
          end
        end
      end
    end

  % ...
  end
end

バージョン履歴

R2020b で導入