Main Content

getLineColumn

コード生成に関連する MATLAB コードの最初と最後の位置の特定

説明

[startLoc,endLoc] = getLineColumn(obj) は、obj で記述された MATLAB® コードの最初の文字と最後の文字に対応する、そのコードを含むファイルのテキスト内での行および列のインデックスを返します。obj で記述するコードは、コード生成に関連する MATLAB の関数またはメソッドです。

[startLoc,endLoc] = getLineColumn(obj_message) は、obj_message で記述されたコード生成メッセージの原因となった MATLAB コードの最初の文字と最後の文字の行および列のインデックスを返します。

[startLoc,endLoc] = getLineColumn(obj_callsite) は、obj_callsite で記述された関数呼び出しサイトの最初の文字と最後の文字に対応する、その呼び出しを含むファイルのテキスト内での行および列のインデックスを返します。

すべて折りたたむ

コード生成プロセス用のレポート情報オブジェクトを作成します。その後、コード生成に関連する MATLAB 関数の、その関数を含むファイル内での位置を特定します。

MATLAB 関数 foo を定義します。

function [b,c] = foo(a)
b = svd(a,0);
c = bar(a);
end

function c = bar(a)
c = inv(a);
end

foo の静的な C ライブラリを生成します。入力を string スカラーとして指定します。コード生成レポートの情報をベースの MATLAB ワークスペースの変数 info にエクスポートします。

codegen -config:lib foo -args {"A string scalar"} -reportinfo info

string スカラーは MATLAB 関数 svd および inv の有効な入力でないため、コード生成は失敗します。コード ジェネレーターにより、レポート情報オブジェクト info がベースの MATLAB ワークスペースに作成されます。

プロパティ info.Functions は 2 次元配列です。info.Functions(1) に MATLAB 関数 foo の記述が格納されます。info.Functions(2) に MATLAB 関数 bar の記述が格納されます。

関数 bar を手動で検証するには、最初に bar を含むファイルのテキストを表示します。

info.Functions(2).File.Text
    'function [b,c] = foo(a)
     b = svd(a,0);
     c = bar(a);
     end
     
     function c = bar(a)
     c = inv(a);
     end
     '

getLineColumn を使用して、このテキスト内の関数 bar の最初と最後の位置を特定します。出力 startLocbar の最初の文字の行および列のインデックスが格納されます。出力 endLocbar の最後の文字の行および列のインデックスが格納されます。

[startLoc,endLoc]=getLineColumn(info.Functions(2))
startLoc = 

  struct with fields:

      Line: 6
    Column: 1


endLoc = 

  struct with fields:

      Line: 8
    Column: 3

失敗するコード生成プロセス用のレポート情報オブジェクトを作成します。その後、エラー メッセージの原因となった MATLAB コードの部分を特定します。

MATLAB 関数 foo を定義します。

function b = foo(a)
b = svd(a,0);
end

foo の静的な C ライブラリを生成します。入力を string スカラーとして指定します。コード生成レポートの情報をベースの MATLAB ワークスペースの変数 info にエクスポートします。

codegen -config:lib foo -args {"A string scalar"} -reportinfo info

string スカラーは MATLAB 関数 svd の有効な入力でないため、コード生成は失敗します。コード ジェネレーターにより、レポート情報オブジェクト info がベースの MATLAB ワークスペースに作成されます。

プロパティ info.Messages は 2 つのコード生成メッセージの記述を含む 2 次元配列です。最初のメッセージの記述を検証します。

info.Messages(1)
  Message with properties:

    Identifier: 'Coder:toolbox:unsupportedClass'
          Type: 'Error'
          Text: 'Function 'svd' is not defined for values of class 'string'.'
          File: [1×1 coder.CodeFile]
    StartIndex: 26
      EndIndex: 33

このエラー メッセージの原因となった MATLAB コードのセグメントを手動で検証するには、最初にこのエラー メッセージに関連付けられているファイルのテキストを表示します。

info.Messages(1).File.Text
'function b = foo(a)
 b = svd(a,0);
 end
 '

getLineColumn を使用して、エラー メッセージの原因となったコードの部分の最初と最後の位置を特定します。出力 startLoc にコード セグメントの最初の文字の行および列のインデックスが格納されます。出力 endLoc にコード セグメントの最後の文字の行および列のインデックスが格納されます。

[startLoc,endLoc] = getLineColumn(info.messages(1))
startLoc = 

  struct with fields:

      Line: 2
    Column: 5


endLoc = 

  struct with fields:

      Line: 2
    Column: 12
これらの位置は、foo.m のテキスト内の関数呼び出し 'svd(a,0)' の最初と最後の位置に対応します。

入力引数

すべて折りたたむ

コード生成に関連する MATLAB 関数または MATLAB クラスのメソッドを記述するオブジェクト。次のいずれかとして指定します。

MATLAB コードからのコード生成時に生成されたエラー、警告、情報のメッセージを記述する coder.Message オブジェクト。coder.Message のプロパティ を参照してください。

MATLAB コード内の関数呼び出しサイトを記述する coder.CallSite オブジェクト。coder.CallSite のプロパティ を参照してください。

出力引数

すべて折りたたむ

LineColumn の 2 つのフィールドをもつ構造体配列。

  • startLoc.Line は、MATLAB コードの最初の文字に対応する、そのコードを含むファイルのテキスト内での行インデックスです。

  • startLoc.Column は、MATLAB コードの最初の文字に対応する、そのコードを含むファイルのテキスト内での列インデックスです。

LineColumn の 2 つのフィールドをもつ構造体配列。

  • endLoc.Line は、MATLAB コードの最後の文字に対応する、そのコードを含むファイルのテキスト内での行インデックスです。

  • endLoc.Column は、MATLAB コードの最後の文字に対応する、そのコードを含むファイルのテキスト内での列インデックスです。

バージョン履歴

R2019a で導入