Xファンクションの例外の扱い

以下のサンプルはLabTalkを使ってXファンクションのエラーを捕まえる例です。これにより、エラーを引き起こす可能性のあるXファンクションを呼び出しによってスクリプト全体を中断させません。

エラーコードを返さないXファンクションに対して、最後に実行したXファンクションのエラーをチェックする次の2つの関数、 xf_get_last_error_code() xf_get_last_error_message()$ があります。これらの関数は、特定のXファンクションがエラーとなる可能性がある場所で使います。

この例では、ユーザにインポートするファイルを選択するオプションが与えられます。しかし、そのインポートがエラーとなる場合(例、ユーザがインポートに適さないファイルタイプを選択する) 、残りのコードを取り扱う必要があります。

dlgfile gr:=*.txt;  // ユーザからファイル名とパスを取得
impasc -se;  // -se スイッチを使用して実行を継続する必要がある、下記note参照
if( 0 != xf_get_last_error_code() )
{
    strError$ = "XFunction Failed: " + xf_get_last_error_message()$;
    type strError$;
    break 1;  // 実行の停止

}
// データインポートは恐らく成功し、スクリプトの実行を継続可能
type continuing...;

通常のXファンクションのオプション -se を使って、エラーメッセージを出さないようにします。-sl オプションを使うと、エラーログを出力しません。 -sb オプションは両方を出力しません。スクリプトの実行を継続して次の行へ移動するには、これら2つの内のどちらかのオプションを使用する必要があります。

ループしてピークを見つける

次のサンプルでは、ワークシートのすべての列をループしてピークを見つけます。特定の列にピークが見つからない場合、スクリプトは残りの列に対して継続されます。ここでは適切なデータを持つワークシートがアクティブであると見なしています。

for(int ii=2; ii<=wks.ncols; ii++)
{
  // 現在の列のにピークが見つけ、XFからエラーメッセージを出力しない
  Dataset mypeaks;
  pkfind $(ii) ocenter:=mypeaks -se; // 継続するには-seを使用する必要がある
 
  // XFがエラーになったかどうかをチェック
  if( 0 != xf_get_last_error_code() )
  {
    type "Failed on column $(ii): %(xf_get_last_error_message()$)";
  }
  else
  {
    type Found $(mypeaks.getsize()) peaks in column $(ii);
  }
}