# frameオブジェクトの配列idとして$_CURを指定すると、カレント座標軸 # の配列idが自動的に代入されます。配列id=0を持つデータオブジェクトの # 数値データ数を求め、変数$lengthに代入します。 $length = $graph->frame[$_CUR]->data[0]->datalength(); # $length < 1の場合(データが無い場合)スクリプトを終了します。 if ($length < 1) { exit(1); } # 変数$maxvalの初期値として、数値データの0番目を代入します。 $maxval = $graph->frame[$_CUR]->data[0]->y[0]; # 変数$iを0から$lengthまでスキャンすることにより、yデータの値を # 変数$valに格納します。$valが$maxvalよりも大きければ、$maxval # の値を$valで置き換えます。 for ($i = 0; $i < $length; $i++) { $val = $graph->frame[$_CUR]->data[0]->y[$i]; if ($val > $maxval) { $maxval = $val; } } # メッセージエリアに最大値を表示します。 print "$maxval\n";
以上のスクリプトは以下のように変形し、より一般化することも可能です。
$length = $graph->frame[$_CUR]->data[0]->datalength(); if ($length < 1) { print 'No data found. aborted.'; exit(1); } ################## この部分が変更点です ############### # CUI関数"edittext"を用いて、メニュー画面上から、最大値を求める # データオブジェクトの番号を、ユーザが選択できるよう一般化されて # います。 ユーザが選択した番号は、特殊変数$_RETに返されます。 # この値を$indexに保管します。 if (!edittext(0, 'input data object index')) { print "canceled\n"; exit(1); } $index = $_RET; # ユーザが入力した番号をチェックし、不正なデータオブジェクト番号 # の場合スクリプトを停止するためのエラールーチンです。 if ($index < 0 || $index >= $graph->frame[$_CUR]->length('data')) { print 'invalid data index. aborted.'; exit(1); } ######################## ここまで ####################### $maxval = $graph->frame[$_CUR]->data[$index]->y[0]; for ($i = 0; $i < $length; $i++) { $val = $graph->frame[$_CUR]->data[$index]->y[$i]; if ($val > $maxval) { $maxval = $val; } } print "maxdata of data[$index] = $maxval\n";