Main Content

coder.read

実行時に生成コードでデータ ファイルを読み取り

R2023a 以降

    説明

    dataFromFile = coder.read(fileName) は、fileName.coderdata ストレージ ファイルからデータを読み取り、ファイル内に格納されているデータを返します。この構文は、定数の fileName の入力に対してのみ機能します。この関数は、C/C++ コードを生成する対象の MATLAB® コードで使用します。実行時に生成コードでデータの読み取りが実行されます。

    ワークスペース変数を .coderdata ファイルに格納するには、MATLAB で関数 coder.write を使用します。

    dataFromFile = coder.read(fileName,TypeHeaderFrom=typeHeaderFilename) は、typeHeaderFilename に格納されている情報を使用して、fileName から読み取るデータの型とサイズを判別します。fileNametypeHeaderFilename は、どちらも .coderdata ファイルでなければなりません。typeHeaderFilename 引数はコンパイル時の定数でなければならず、この名前で表されるファイルがコード生成時に現在のディレクトリに存在している必要があります。

    それぞれの .coderdata ファイルには、そのファイルに格納されているデータの型とサイズを指定する "タイプ ヘッダー" が含まれています。関数 coder.read の生成コードでは、実行時に任意の .coderdata ファイルを読み取ることができますが、それらのファイルの型とサイズは、コード生成時に typeHeaderFilename ファイルを使用して提供する型とサイズの情報と一致したものになります。

    TypeHeaderFrom 引数で使用する .coderdata ファイルを作成するには、MATLAB で関数 coder.write を使用します。

    [dataFromFile,errID] = coder.read(___) は、読み取り操作時の実行時エラーを非表示にします。errIDcoder.ReadStatus 列挙オブジェクトです。エラーが発生した場合、coder.read は最初のエラーを errID で返し、使用できない内容を dataFromFile で返します。このオプションは、実行時エラーが無効になっているターゲットに対する生成コードのテストに使用します。

    すべて折りたたむ

    この例では、coder.write を使用して、MATLAB ワークスペースから単一の配列を格納する .coderdata ファイルを作成します。その後、このファイルを実行時に読み取る関数 coder.read の呼び出しのコードを生成します。

    ワークスペースに 20 行 20 列の double 型の配列を作成します。

    c = rand(20);

    この変数を現在のディレクトリ内の exampleData.coderdata という名前のファイルに格納します。

    coder.write("exampleData.coderdata",c);

    定数のファイル名 exampleData をもつ .coderdata ファイルから読み取るには、MATLAB エントリポイント関数で示されているように関数 coder.read を使用します。

    function data = readSingleFile %#codegen
    data = coder.read("exampleData.coderdata");
    end

    readSingleFile の MEX 関数を生成します。

    codegen readSingleFile -report

    生成された MEX を実行して、exampleData.coderdata に格納されているデータを実行時に読み取ります。

    readSingleFile_mex

    この例では、実行時に複数の .coderdata ファイルを読み取ることができる coder.read コマンドのコードを生成する方法を示します。これらのファイルには、型は同じですがサイズが異なる配列データが含まれています。これらのすべてのファイルを coder.read の単一の呼び出しで読み取れるように、個々のすべてのデータ ファイルと一致するタイプ ヘッダー ファイルを関数 coder.read の呼び出しに渡します。

    最初に、生成コードで読み取るストレージ ファイルを作成します。次の coder.write コマンドでは、double 型の配列データをもつ 2 つの変数が格納されたストレージ ファイル file_a.coderdata を作成しています。変数 ab はサイズが異なります。

    a = rand(10,20);
    b = rand(5,30);
    coder.write("file_a.coderdata",a);

    a および b の両方の変数と一致する coder.Type オブジェクトでは、次元を可変サイズにする必要があります。2 つの配列次元の上限は、それぞれ少なくとも 10 と 30 でなければなりません。これらの範囲をもつ可変サイズの double 型を表す coder.Type オブジェクトを作成します。

    t = coder.typeof(a,[10 30],[1 1])
    t = 
    
    coder.PrimitiveType
       :10×:30 double

    file_a.coderdata のヘッダー情報を変更し、変更したファイルをタイプ ヘッダー情報のソースとして使用できます。

    coder.write("file_a.coderdata",a,TypeHeader=t);

    次のコマンドを実行して、必要なタイプ ヘッダー情報をもつ file_b.coderdata ファイルを作成することもできます。

    coder.write("file_b.coderdata",b,TypeHeader=t);

    file_a.coderdatafile_b.coderdata を読み取ることができる MATLAB エントリポイント関数 readMultipleFiles を作成します。

    function data = readMultipleFiles(filename) %#codegen
    data = coder.read(filename,TypeHeaderFrom="file_b.coderdata");
    end

    readMultipleFiles の MEX を生成します。入力引数の型を制限のない可変サイズの文字ベクトルとして指定します。

    codegen readMultipleFiles -args {coder.typeof('a',[1 inf])} -report

    生成された MEX を入力 'file_a.coderdata''file_b.coderdata' を指定して実行します。

    readMultipleFiles_mex('file_a.coderdata')
    readMultipleFiles_mex('file_b.coderdata')

    入力引数

    すべて折りたたむ

    データを読み取る .coderdata ストレージ ファイルの名前。string スカラーまたは文字ベクトルとして指定します。

    ワークスペース変数を .coderdata ファイルに格納するには、MATLAB で関数 coder.write を使用します。

    実行時に読み取るファイルの型とサイズの情報を格納する .coderdata ファイルの定数のファイル名。string スカラーまたは文字ベクトルとして指定します。

    それぞれの .coderdata ファイルには、そのファイルに格納されているデータの型とサイズを指定する "タイプ ヘッダー" が含まれています。関数 coder.read の生成コードでは、実行時に任意の .coderdata ファイルを読み取ることができますが、それらのファイルの型とサイズは、コード生成時に typeHeaderFilename ファイルを使用して提供する型とサイズの情報と一致したものになります。このファイルは "タイプ ヘッダー ファイル" とも呼ばれます。

    タイプ ヘッダー ファイルを作成するには、MATLAB で関数 coder.write を使用します。

    出力引数

    すべて折りたたむ

    .coderdata ストレージ ファイルから読み取ったデータ。単一の配列か、構造体または cell 配列内に格納された複数の配列として返されます。

    データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string | struct | cell | categorical | sparse

    読み取りエラー列挙オブジェクト。次の値のいずれかとして指定します。

    列挙メンバー列挙値エラー参照
    Success0

    読み取り操作が成功しました。

    CoderReadCouldNotOpen1

    指定された .coderdata ファイルを開けません。

    CoderReadProblemReading2

    .coderdata ファイルの読み取り中に問題が発生しました。

    CoderReadUnexpectedValue3

    .coderdata ファイルに予期しない値があります。

    CoderReadWrongHeader4

    .coderdata ファイルに必要なメタデータが含まれていません。入力ファイルが破損している可能性があるか、.coderdata ファイルでありません。coder.write を使用して .coderdata ファイルを作成してください。

    CoderReadWrongVersion5

    .coderdata ファイルはこのリリースの MATLAB Coder™ と互換性がありません。このバージョンの製品で新しい .coderdata ファイルを作成し、互換性のあるファイルを生成してください。

    CoderReadStructArray6

    スカラー構造体を読み取る必要がありますが、.coderdata ファイルには構造体配列が含まれています。互換性のある TypeHeader を使用してこのファイルを読み取るか、または定数のファイル名を使用してください。

    MATFile7

    coder.read では MAT ファイルは読み取れません。次のコマンドをコマンド ウィンドウで実行して、MAT ファイルを .coderdata ファイルに変換してください。

    s = load('MATFileName');
    coder.write('fileName.coderdata',s);

    新しい .coderdata ファイルを coder.read を使用して読み取ります。

    WrongType8

    .coderdata ファイルの型情報が TypeHeaderFrom 引数で指定された型情報と一致しません。

    拡張機能

    C/C++ コード生成
    MATLAB® Coder™ を使用して C および C++ コードを生成します。

    バージョン履歴

    R2023a で導入