メインコンテンツ

coder.read

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

R2023a 以降

    説明

    C/C++ コードを生成する MATLAB® コードでは、coder.read 関数を使用して .coderdata ファイルからデータを読み取ります。実行時に生成コードでデータの読み取りが実行されます。

    データを .coderdata ファイルに格納するには、MATLAB 実行で coder.write 関数を使用します。

    それぞれの .coderdata ファイルには、そのファイルに格納されているデータの型とサイズを指定する "タイプ ヘッダー" が含まれています。coder.read 関数は、ファイルの内容を解釈するときにこの情報を使用します。

    dataFromFile = coder.read(filename) は、filename.coderdata ストレージ ファイルからデータを読み取り、ファイル内に格納されているデータを返します。この構文は、定数の filename の入力に対してのみ機能します。この名前で表されるファイルがコード生成時に現在のフォルダーに存在している必要があります。

    生成されたコードを実行する前に、coder.write 関数を使用して filename.coderdata に含まれているデータを変更できます。ただし、filename.coderdata に含まれているデータの型とサイズは、コード生成時と実行時で同じでなければなりません。

    dataFromFile = coder.read(filename,TypeHeaderFrom=typeHeaderFilename) は、typeHeaderFilename に含まれている型とサイズの情報を使用して、filename のデータを解釈します。typeHeaderFilename 引数はコード生成時に定数でなければならず、この名前で表されるファイルがコード生成時に現在のフォルダーに存在している必要があります。コード ジェネレーターは、コード生成時に typeHeaderFilename から型とサイズの情報を取得します。

    coder.read 関数の生成コードでは、実行時に任意の .coderdata ファイルを読み取ることができます。ただし、含まれているデータの型とサイズは、typeHeaderFilename ファイルを使用してコード生成時に提供した型とサイズの情報と一致している必要があります。

    [dataFromFile,errID] = coder.read(___) は、読み取り操作時の実行時エラーを非表示にします。エラーが発生した場合、coder.read は最初のエラーを errID として返します。dataFromFile 引数は、使用できないファイルの内容を返します。この構文を使用して、実行時エラーが無効になっているターゲットに対して生成されたコードをテストします。

    すべて折りたたむ

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

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

    data = rand(100);

    この変数を、現在のフォルダー内の exampleData.coderdata という名前のファイルに格納します。

    coder.write('myfile.coderdata',data);
    Wrote file 'myfile.coderdata'. You can read this file with 'coder.read'.

    定数のファイル名 exampleData をもつ .coderdata ファイルから読み取るには、単一の入力引数をもつ coder.read 関数の構文を使用します。

    function y = my_entry_point(x) %#codegen
    dataOut = coder.read('myfile.coderdata');
    y = x + mean(dataOut,"all");
    end

    次のコマンドを実行して、MEX 関数 my_entry_point_mex を生成してから、生成された MEX を呼び出します。

    codegen my_entry_point -args {0}
    my_entry_point_mex(1)
    Code generation successful.
    
    ans =
    
        1.4996

    これで、myfile.coderdata に格納されているデータを、100 行 100 列の double 型の異なる配列に更新できます。その後、既に生成した my_entry_point_mex を呼び出すと、MEX は新しいデータを読み取り、使用します。

    d = rand(100) - 1;
    coder.write('myfile.coderdata',d);
    my_entry_point_mex(1)
    Wrote file 'myfile.coderdata'. You can read this file with 'coder.read'.
    
    ans =
    
        0.4963

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

    最初に、生成コードで読み取るストレージ ファイルを作成します。コマンド ラインで、両方とも double 型だがサイズが異なる変数 var_avar_b を作成します。coder.write 関数を使用して、配列 var_a と配列 var_b を、それぞれファイル file_a.coderdata とファイル file_b.coderdata に格納します。

    var_a = rand(10,20);
    var_b = rand(5,30);
    coder.write("file_a.coderdata",var_a)
    coder.write("file_b.coderdata",var_b)
    Wrote file 'file_a.coderdata'. You can read this file with 'coder.read'.
    Wrote file 'file_b.coderdata'. You can read this file with 'coder.read'.

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

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

    var_avar_b の両方の配列と互換性をもつように file_a.coderdata のヘッダー情報を変更します。変更したファイルを、必要な共通のタイプ ヘッダー ファイルとして使用できます。

    coder.write("file_a.coderdata",a,TypeHeader=t);
    Wrote file 'file_a.coderdata'. You can read this file with 'coder.read'.

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

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

    readMultipleFiles の MEX 関数を生成します。任意の長さのファイル名を表すことができるように、入力引数の型を制限のない可変サイズの文字ベクトルとして指定します。

    codegen readMultipleFiles -args {coder.typeof('a',[1 inf])} -report
    Code generation successful: View 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 スカラーまたは文字ベクトルとして指定します。typeHeaderFilename はコード生成時に定数でなければなりません。

    それぞれの .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 ファイルには構造体配列が含まれています。このファイルを読み取るには、互換性のある TypeHeaderFrom 引数を指定してください。または、定数の filename の入力のみを受け入れる最初の構文を使用してください。

    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 で導入