ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

ファイル入出力用 System Object の新規作成

この例では、dsp.examples.FileReader と dsp.examples.FileWriter という 2 つの System object を作成して使用する方法を示します。これらの System object は、MATLAB 関数 FREAD および FWRITE を使用することで、基本的なファイルの読み取りと書き込みを実装します。

はじめに

この例では、ファイル リーダーとファイル ライターという 2 種類の System object を作成し、一方から他方へ文字をストリームします。

クラスの作成

System object は、matlab.System から派生し、そのクラスのメソッドをいくつか実装する MATLAB クラスです。この例では、簡単なファイル リーダー (dsp.examples.FileReaderdsp.examples.FileReader) とファイル ライター (dsp.examples.FileWriterdsp.examples.FileWriter) を使用します。FileWriter System object は、4 つのセクションで構成されます。

1. パブリック プロパティ Filename。これは調整できません (step メソッドへの最初の呼び出し以降、変更できません)。

  properties (Nontunable)
    Filename = ''
  end

2. ファイル ハンドルを保持するプライベート プロパティ。

  properties (Access=private)
    pFID = 0
  end

3. コンストラクター。コンストラクターで setProperties メソッドを呼び出して、名前と値のペアをコンストラクターに提示することにより、ユーザーが System object のプロパティを設定できるようにします。

  methods
    function obj = FileWriter(varargin)
      setProperties(obj, nargin, varargin{:});
    end
  end

4. matlab.System 基底クラスからのいくつかのオーバーライドされたメソッド。パブリックの System object メソッドのそれぞれには、オーバーライド可能な Impl 接尾辞をもつ対応する保護メソッドがあります。たとえば、パブリックの step メソッドには、対応する保護メソッド stepImpl があり、これはオブジェクトのアルゴリズムを実装するために使用されます。この System object のためにオーバーライドされる実装メソッドは、以下のとおりです。

  • setupImpl - オブジェクトを初期化

  • resetImpl - オブジェクトの状態をリセット

  • stepImpl - アルゴリズムを実行

  • releaseImpl - オブジェクトとそのリソースを解放

  • getNumInputsImpl - step への入力数を定義

  • getNumOutputsImpl - step への出力数を定義

初期化

処理ループの前に、コピーするソース ファイルを作成して System object を初期化します。

% Create two different file names by calling the MATLAB tempname function
% twice.
sourceFile      = tempname();
destinationFile = tempname();

% Create the file containing the text to copy
fid = fopen(sourceFile, 'w');
fprintf(fid,'Simple System object example');
fclose(fid);

% You call the System object constructors before the stream processing
% loop.
hIn  = dsp.examples.FileReader('Filename', sourceFile);
hOut = dsp.examples.FileWriter('Filename', destinationFile);

ストリーム処理ループ

次に、ソース ファイルから読み取って対象ファイルに書き込む処理ループを作成します。ここでは実行しませんが、各ステップでファイルから (またはファイルに) 複数の文字を読み取るか書き込んで、パフォーマンスを向上させることができます。

% The isDone method returns true when the FileReader has reached the end of
% the file.
while ~isDone(hIn)
    % Read in a single character.  The first time that you call step(), it
    % also calls the setup() method, which is where the file is opened.
    % Note that the step() method calls the stepImpl() method on the
    % reader/writer class.
    c = step(hIn);

    % Convert the character  to upper
    % case.
    c = upper(c);

    % Write the character that was read from the source.
    step(hOut, c);
end

System Object の解放

release メソッドを明示的に使用することは、必ずしも必要ではありません。解放は、System object が消去されるときに暗黙的に実行されます。ただし、場合によってはリソースをすぐに解放した方がよいこともあります。この例では、リソースはファイル ポインターであるため、release を呼び出すとファイルが閉じます。

release(hIn);
release(hOut);

正しい操作を確認するため、ソース ファイルと対象ファイルの内容を表示します。

type(sourceFile);
type(destinationFile);
Simple System object example

SIMPLE SYSTEM OBJECT EXAMPLE

まとめ

この例では、System object を使用してファイルからの読み取りと書き込みを行いました。文字がファイルから 1 つずつ読み取られ、大文字に変換され、対象ファイルにストリームされました。FileReader と FileWriter の各 System object を編集して、独自の目的にかなうファイルの読み取りと書き込みを実行することができます。

付録

この例のために作成した System object は、以下のとおりです。

この情報は役に立ちましたか?