FrameFirst関数の働き・役割
FrameFirst関数は、データフレームの読み込みにおいて、フレーム読み込みのポインタを先頭に移動するために使用されます。この関数を呼び出すことで、以前に設定されたフィルタがリセットされるため、フレームの最初からデータを再度取得したい場合に便利です。データフレームの読み込みや解析を繰り返す際に、指定位置をリセットして最初からデータを読み込み直す場面で役立ちます。
FrameFirst関数の引数について
bool FrameFirst();
FrameFirst関数は引数を取りません。
FrameFirst関数の戻り値について
FrameFirst関数は、フレームのポインタを先頭に移動し、フィルタをリセットできた場合にtrueを返します。反対に、何らかの理由で操作が失敗した場合にはfalseを返します。処理が失敗した際の詳細なエラー情報を取得するには、GetLastError関数を使用することが推奨されます。例えば、ファイルの読み込みエラーやポインタ操作の失敗といった原因を知ることができます。
FrameFirst関数を使ったサンプルコード
// 最適化の各パスで新しいフレームが到着した際に自動的に呼び出される関数
void OnTesterPass()
{
// フレームのパスIDを格納するための変数。最適化の各パス(試行)ごとに一意のIDが付与される
ulong pass_id;
// フレームの名前を格納するための変数。FrameAdd関数を使って送信される際に設定された名前が入る
string frame_name;
// フレームの識別IDを格納する変数。FrameAdd関数で設定した識別番号が保持される
long frame_id;
// フレームの値(数値データ)を格納するための変数。FrameAddで指定された数値情報が入る
double frame_value;
// FrameNext関数は、次のフレームが存在する限りtrueを返し、フレームデータを変数に格納する
// フレームがなくなるまでループを継続
while(FrameNext(pass_id, frame_name, frame_id, frame_value))
{
// 取得したフレームデータをエキスパートログに出力
// Print関数を使用し、Pass ID、フレーム名、識別ID、値の情報を表示
Print("Pass ID: ", pass_id, // 最適化のパスIDを表示
" Name: ", frame_name, // フレームの名前を表示
" ID: ", frame_id, // フレームの識別IDを表示
" Value: ", DoubleToString(frame_value, 2)); // 数値データを小数点2桁で表示
}
}
// 最適化が終了した後に未処理のフレームを処理するための関数
void OnTesterDeinit()
{
// 最適化パスID、フレーム名、識別ID、値を保持する変数を定義
ulong pass_id;
string frame_name;
long frame_id;
double frame_value;
// FrameFirst関数を呼び出してフレームの最初の位置に移動
// 最適化完了後、すべてのフレームを再確認する準備を行う
FrameFirst();
// 未処理のフレームがある限り、次のフレームを取得して処理を繰り返す
while(FrameNext(pass_id, frame_name, frame_id, frame_value))
{
// 未処理のフレームデータをエキスパートログに出力して確認
Print("Deinit - Pass ID: ", pass_id, // 最適化パスIDを表示
" Name: ", frame_name, // フレームの名前を表示
" ID: ", frame_id, // フレームの識別IDを表示
" Value: ", DoubleToString(frame_value, 2)); // 数値データを小数点2桁で表示
}
}
サンプルコードに使われた関数や変数の詳細な解説
- OnTesterPass関数
最適化中にテストエージェントから新しいデータフレームが送信された際に自動的に呼び出され、フレーム内容の受け取りと処理を行う関数です。 - OnTesterDeinit関数
最適化が完了した後に呼び出され、未処理のフレームを確認・処理するために使用されます。 - pass_id
各最適化パス(試行)ごとに一意のIDを格納するための変数で、FrameNext関数で取得されます。 - frame_name
フレームの名前を格納する変数で、FrameAdd関数で設定した名前が入ります。識別名として利用することができます。 - frame_id
フレームの識別IDを保持する変数で、各フレームの特定情報として設定されます。 - frame_value
フレームに含まれる数値データを格納する変数です。最適化の結果や評価指標などを受け取ります。 - while文
while文は、条件が満たされている限り繰り返し処理を実行する構文です。このコードでは、FrameNext関数がtrueを返す間、つまり未処理のフレームがある限りループが続きます。while文の内部でFrameNext関数が新たなフレームデータを取得し、変数に格納して処理を繰り返します。 - FrameNext関数
次のフレームが存在するかを確認し、存在する場合にはそのデータを取得して指定の変数に格納します。未処理のフレームを順次処理する際に使用します。 - FrameFirst関数
最初のフレームに移動するために使用します。OnTesterDeinit関数で、フレームの再処理を行う際に利用されます。 - Print関数
取得したデータをエキスパートログに表示するための関数です。このサンプルでは各フレームのID、名前、識別ID、数値データを表示しています。 - DoubleToString関数
DoubleToString関数は、数値を文字列に変換する関数です。このコードではframe_valueを小数点以下2桁に指定して文字列化し、エキスパートログに出力しています。