*目次 #contents *数値変数 数値変数としてはアルファベットで始まりピリオドを含まない変数名が使える(大文字と小文字は区別される)。 ただし以下に挙げるシステム変数はOriginが内部で使っているので、不用意に使うと動作が不安定になる。 その他の数値変数は自由に使用してよい。 |システム変数| 意味 |h |X, Y, Z|Data Reader や Data Selector での現在の座標 | |X1, X2, Y1, Y2|現在 active な layer のグラフの表示範囲 | |Echo|エラーメッセージの表示のしかた | |I|内部のループ変数。主に行や列を指定する | |SELC1, SELC2, SELR1, SELR2|現在のワークシートの選択範囲 | |COUNT|内部で使用する計数変数 | *文字列変数 先頭に%がついたアルファベット1文字でユーザー変数は%K〜%Tと%Wのみ。残りはシステム変数。各文字列変数は105文字(%Zは8192文字)までの文字列を記憶できる。 |システム変数| 意味 |h |%A|getfilenameの返り値 | |%B|getstringの戻り値 | |%C|現在activeなdatasetの名前(WKS_COL) | |%D|最後にsetコマンドでactiveにされたdatasetの名前(WKS_COL) | |%E|最後に選択されたワークシートのwindow名 | |%F|現在fittingしているdataset(WKS_COL) | |%G|現在のproject名 | |%H|現在activeなwindow名 | |%I|現在のbaselinedataset? | |%J|現在のDDEアイテム | |%K〜%T|ユーザー変数 | |%U|fittingに関するメッセージ | |%V|現在のfittingのモデル名 | |%W|ユーザー変数 | |%X|現在のprojectのパス名 | |%Y|ORIGINプログラムの実行ファイル名 | |%Z|内部で使用する一時的な文字変数 | *データセット データセットとはワークシートの一つのcolumnのことであり、1次元配列を持つオブジェクトである。 データセットは通常WKS_COLという形で指定される。ただし、WKSはワークシート名、COLはcolumn名を表す。 *データセットやセルの指定の仕方 -データセットWKS_COLのi番目のセルはWKS_COL[i]というふうに指定される。 -関数%( )を使ってもデータセットやセルを指定できる。 |%(WKS, i)|ワークシートWKSの i 番目のコラムのデータセット名 | |%(WKS, i, j)|ワークシートWKSの i 番目の column、j番目の row のセル | -データセット名を返す関数や文字列に[row]をつけてセルを指定できる。 (例) |data1_a|ワークシートdata1のコラムaのデータセット| |data1_a[10]|ワークシートdata1のコラムaの10番目のセル| |col(b)|現在のワークシートのコラムb| |col(b)[20]|現在のワークシートのコラムbの20番目のセル| |%K[30]|文字列変数%Kに格納された名前で表されるデータセットの30番目のセル| |%(data1,2,5)|ワークシートdata1の2番目のコラムの5番目のセル| |%(data1,2)[5]|同上| *代入 -数値変数への数値の代入&br; a=10 -文字列変数への文字列の代入&br; %A=''John'' (double quotationは省略してもよい。) -データセットへの代入&br; WKS_COLというデータセットに他のデータセットまたは配列を代入するときは WKS_COL=代入するデータセットまたは配列 とする。代入先のデータセット名が文字列変数に格納されているときはその変数名に括弧をつけて (%A)=代入するデータセットまたは配列 としなくてはならない。さもなくば、単に文字列の代入になってしまう。 %(WKS,i)=data_A や col(A)=col(B) のように、データセット名を返す関数の戻り値に対して代入することもできる。この場合は括弧は必要ない。 &br; (例) data1_a = {1,2,3,4,5,6}; ワークシートdata1のコラムaに1,2,3,4,5,6を代入する。 data1_a[10] = 5; ワークシートdata1のコラムaの10番目のセルに5を代入する。 data1_a = data1_b; ワークシートdata1のコラムbの内容を全てコラムaにコピーする。 data1_a = data1_b+5; ワークシートdata1のコラムbのすべてのセルの内容に5を足してコラムaにコピーする。 data1_a = 0; ワークシートdata1のコラムaの全てのセルに0を代入する。| data1_c=data1_a*data1_b; ワークシートdata1のコラムaとコラムbの内容の積をコラムcに書き込む。 col(B)=col(A) * 2; 現在のワークシートのコラムBにコラムAの内容を2倍にして代入する。 *構文 **繰り返し構文 -loop( variable, start, end ){ script };&br; 整数 variable を start から end まで変えながらscriptを実行する。 -for( exp1; exp2; exp3 ){ script };&br; 使い方はc言語と同じ -repeat num { script };&br; num 回 script を実行する。 -break option arg;&br; optionもargもない場合は現在のループを脱出する。&br; argに1を指定すると現在のスクリプトを終了する。&br; optionをつけることによってメッセージの表示や実行の選択が可能。&br; -continue;&br; for文やloop文において次の繰り返しに飛ぶ。 **条件分岐構文 -if ( condition ) { script1 } else { script2 };&br; 使い方はc言語と同じ。else以下は省略できる。 -switch( argument ){ case1: script1; case2 : script2; ... };&br; 使い方はc言語と同じ。 *ワークシートの情報の取得 -%() 関数&br; |%(WKS, i)|ワークシートWKSの i 番目のコラムのデータセット名 | |%(WKS, i, j)|ワークシートWKSの i 番目の column、j番目の row の値 | |%(WKS, @option, i)|ワークシートWKSの i 番目のcolumnのoptionに関する情報 | (オプション) |@option| 戻り値 |h |@type|i 列の種類 ( 1: Y列 2: 無属性 3 : エラーバー列 4: X列 ) | |@colname|i 列の名前 | |@data|i 列のデータセット名 | |@Xn|i 列に対応するX列の名前 | |@X|ワークシート全体のX列の数 | |@Y-|i 列より左側(i 列を含む)の最初のY列の番号 | |@Y+|i 列より右側(i 列を含む)の最初のY列の番号 | |@Y#|i=1の場合、ワークシート全体のY列の数を返し、i=2の場合は選択領域のY列の数を返す。 | |@#|ワークシート全体の列の数 | -ワークシートプロパティ&br; WKS!wks.propertyの形でアクセスする。WKS!を省略すると現在activeなワークシートが対象になる。 |property| 戻り値 |h |nCols|総column数 | |nRows|総row数 | |maxRows|値のある最大のrow番号 | その他のプロパティについてはマニュアル参照 *データセット情報の取得 -hasx(dataset)&br; datasetが対応するXデータセットを持てば1、持たなければ0を返す。 -xof(dataset)&br; datasetに結び付いたXデータセットの名前を返す。 -errof(dataset)&br; datasetに結び付いたエラーデータのデータセット名を返す。 -xindex(x,dataset)&br; datasetに結びついたXデータセットのセル値がxと同じか、それより小さい最初のセルのインデックス番号を返す。datasetはY属性をもっていなくてはならない。 -xindex1(x,dataset)&br; datasetに結びついたXデータセットのセル値がxと同じか、それより大きい最初のセルのインデックス番号を返します。datasetはY属性をもっていなくてはならない。 -list(value,dataset)&br; valueが最初に存在するdataset中のインデックス番号を返す。相当するものがない場合は0を返す。 *グラフ情報の取得 -layer -c&br; 現在のレイヤーのグラフに存在するデータセットの数を調べ、システム変数countに格納する。同時に、データセット名を列挙したものをシステム変数%Zに格納する。データセット名は関数%[%Z,i]を使って抜き出すことができる。 *よく使うコマンドと関数 **入力&表示に関するコマンド -type&br; スクリプトウインドウに文字列を表示する。数値変数の内容を表示したい場合は、関数 $( ) によって文字列に変換する必要がある。 -getnumber (message) val&br; messageというダイアログを表示して数値の入力を行い、変数valに格納する。 -getstring (message) initstr&br; messageというダイアログを表示して文字列の入力を行い、変数%Bに格納する。initstrは初期文字列。 -getyesno (message ) val&br; YesかNoかを問うダイアログを表示して、結果を変数valに格納する。 **ワークシートの操作に関するコマンド -create name -w n c1 c2 ...;&br; column名c1,c2,... およびrow数n を持つ名前nameのワークシートを作る -worksheet -d name;&br; 現在アクティブなワークシートの複製をnameという名前で作成する。 -worksheet -s c1 r1 c2 r2;&br; アクティブなワークシートのc1 r1 c2 r2で指定される領域を選択する。c1とc2がゼロの場合は全てのcolumnが対象となり、r1とr2がゼロの場合は全てのrowが対象となる。 **データセットの操作に関するコマンドと関数 -create WKS_COL -c n&br; 列数nのXYデータセットを作る。値は全て0。Xデータの名前はWKS_Aとなる。 -copy dataset1 dataset2&br; dataset1の内容をdataset2にコピーする。 -copy -x dataset1 dataset2&br; dataset1の内容を別なワークシートにあるdataset2にコピーする。その際、可能ならdtaset1のXデータセットもdataset2のXデータセットにコピーする。(->Xデータセットが複数ある時にはうまく働かない) **グラフ描画に関するコマンド -layer -in dataset&br; 現在のレイヤーにプロットを追加する。プロットタイプはnで指定する。(worksheetコマンドを参照) -draw {x1,y1,x2,y2}&br; グラフに直線や点線などを描画する。 -worksheet -p n&br; アクティブなワークシートの選択領域をプロットする。nはプロットのタイプを指定する。 |n| type |h |200|line | |201|scatter | |202|line+symbol | **文字列を返す関数 -col(COL)&br; 現在activeなワークシートのcolumn COL のdataset名をWKS_COLの形で返す。 -wcol(i)&br; 現在activeなワークシートのi番目の column のdataset名をWKS_COLの形で返す。 -$(num)&br; 数値などを文字列に変換する。formatも指定可能。 ***%[ ] 関数 -%[string, 'ch']&br; 文字列の先頭から最初に現れる文字chの前までを抜き出す。 -%[string, 'ch']&br; 最初に現れる文字chの次から文字列の最後までを抜き出す。 -%[string, n]&br; 先頭のn文字を抜き出す。 -%[string, m:n]&br; m文字目からn文字目までを抜き出す。 -%[string, #n]&br; n番目のトークンを返す。 -%[string]&br; 文字列の長さを返す。 **数値を返す関数 -exist(name)&br; 名前nameをもつオブジェクトが存在すればそのオブジェクトの型を番号で返す。 |戻値|意味|h | 0| 存在しない| | 1| dataset| | 2| worksheet| | 3| graph window| | 4| variable| | 5| matrix| | 6| macro| | 7| tool| | 9| notes window| -その他、sin, cos, expなどの数学関数はほとんど使える。 **datasetに代入できる配列を返す関数 -data( v1, v2, inc )&br; v1からv2までincステップの配列を作る。 incを省略するとステップは1になる。 -{v1, v2, ... , vn}&br; 配列を実際の値を使って作る。 -Fit(dataset)&br; 直前のフィッティングの結果を用いて、datasetをX値とした配列を作る。 *スクリプトの例 -[[モーメント解析(スペクトルの強度、重心、分散を求める):http://optphys.sci.hokudai.ac.jp/~sekika/labtalk/example/moments.ogs]] -[[スペクトルのピークと幅を実測する。:http://optphys.sci.hokudai.ac.jp/~sekika/labtalk/example/getpw7.ogs]] -[[シフトプロット(複数のデータを適当な間隔で縦に並べて作図):http://optphys.sci.hokudai.ac.jp/~sekika/labtalk/example/shiftplot.ogs]] -[[カスケードプロット(現在のプロットを上下にずらして再描画する。シフトプロットの改良版):http://optphys.sci.hokudai.ac.jp/~sekika/labtalk/example/cascade.ogs]] ---- #comment