それぞれ bk000、bk001、bk002、…、bk099 という名前の wave に読み込まれたスペクトルのデータから、 1269 番目のデータポイントを抽出して、aaa という wave に格納するという操作を行うことにしよう。 このような操作は、まず aaa という wave を行数 100 行(100 行以上なら可)で作成し、 次のようなコマンドを実行していけばよい。
aaa[0] = bk000[1268] aaa[1] = bk001[1268] aaa[2] = bk002[1268] ・・・・・・・・
こうした入力作業をたった 100 回やるだけでデータの抽出は完了である。 けれどもこうした忍耐力を付ける実習をすでに十分積んだ人の中にはマクロの勉強をしてみたい人がいるかもしれない。 そうした人は手始めに、次のようなマクロを利用するのが簡単だろう:
Macro MacOTK() // 変数の宣言 variable i=0 string ss // ループ処理 do sprintf ss, "bk%03d", i aaa[i] = $ss[1268] i+=1 while (i < 100) End
先に紹介したファイルからの読み込みと同様だが、 wave を参照するのに文字列変数に格納されたデータが利用できることに注意する 。 この「$ss[1268]」を「$ss[1395]」に書き換えれば 1396 番目のデータが、 あるいは「($ss[1267]+$ss[1268]+ $ss[1269])/3」とすれば 1269 番目のデータ前後の平均を抜き出したものが得られる。 なお2次元の wave(matrixと呼ばれる)を利用する手もあるが今回はそこまでしなくてよいだろう。
「sprintf ss, "bk%03d", i」の "bk%03d" は C 言語で用いられる書式指定子と呼ばれる部分。
「%03d」は i に格納された数値を 3 ケタの十進数に置き替え、
上位桁をゼロで埋めた形で表現する(リーディングゼロ)という意味。
「$ss」はssの指すメモリーに格納された文字列データを意味する。
このあたりは C 言語をかじった人はポインターとの関連でよくご存知かもしれない。