#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文字)までの文字列を記憶できる。

%がついたアルファベット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]というふうに指定される。

-(例)
 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 = 0   	ワークシートdata1のコラムaの全てのセルに0を代入する。
 data1_c=data1_a*data1_b  ワークシートdata1のコラムaとコラムbの内容の積をコラムcに書き込む。
 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 = 0;                   ワークシートdata1のコラムaの全てのセルに0を代入する。|
 data1_c=data1_a*data1_b; ワークシートdata1のコラムaとコラムbの内容の積をコラムcに書き込む。

あるいは関数%( )を使ってもデータセットやセルを指定できる。
-関数%( )を使ってもデータセットやセルを指定できる。

|%(WKS, i)|ワークシートWKSの i 番目のコラムのデータセット名 |
|%(WKS, i, j)|ワークシートWKSの i 番目の column、j番目の row の値 |
|%(WKS, @option, i)|ワークシートWKSの i 番目のcolumnのoptionに関する情報 |

-(オプション)
|option|戻り値 |
|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;
      a=10など。
      a=10
-文字列変数への代入&br;
      %A=''John''
      double quotationはなくてもよい。
      (double quotationは省略してもよい。)
-データセットへの代入&br;
      データセットdatasetにデータセットまたは配列を代入するときは
データセットdatasetにデータセットまたは配列を代入するときは
      dataset名=代入するデータセットまたは配列
      (%A)=代入するデータセットまたは配列
      などとする。
      %(WKS,i)=data_Aやcol(A)=col(B)のように、データセット名を返す関数の戻り値に対して代入することもできる。
などとする。
      %(WKS,i)=data_Aやcol(A)=col(B)
のように、データセット名を返す関数の戻り値に対して代入することもできる。

*構文
**繰り返し構文

    * loop( variable, start, end ){ script };
      整数 variable を start から end まで変えながらscriptを実行する。
    * for( exp1; exp2; exp3 ){ script };
      使い方はc言語と同じ
    * repeat num { script };
      num 回 script を実行する。
    * break option arg;
      optionもargもない場合は現在のループを脱出する。
      argに1を指定すると現在のスクリプトを終了する。
      optionをつけることによってメッセージの表示や実行の選択が可能。
    * continue;
      for文やloop文において次の繰り返しに飛ぶ。
-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言語と同じ。

    * if ( condition ) { script1 } else { script2 };
      使い方はc言語と同じ。else以下は省略できる。
    * switch( argument ){ case1: script1;  case2 : script2; ... };
      使い方は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 	
cCols 	総column数
nRows 	総row数
maxRows 	値のある最大のrow番号
|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
      スクリプトウインドウに文字列を表示する。数値変数の内容を表示したい場合は、
      関数 $( ) によって文字列に変換する必要がある。
    * getnumber
      ダイアログを表示して数値の入力を行う。
    * getstring
      ダイアログを表示して文字列の入力を行う。 
**入力&表示に関するコマンド

**データセットの操作に関するコマンド
-type&br;
スクリプトウインドウに文字列を表示する。数値変数の内容を表示したい場合は、関数 $( ) によって文字列に変換する必要がある。
-getnumber&br;
ダイアログを表示して数値の入力を行う。
-getstring&br;
ダイアログを表示して文字列の入力を行う。 

    * create WKS_COL -c n
      列数nのXYデータセットを作る。値は全て0。Xデータの名前はWKS_Aとなる。
    * copy dataset1 dataset2
      dataset1の内容をdataset2にコピーする。 
**ワークシートの操作に関するコマンド

**グラフ描画に関するコマンド
-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が対象となる。

    * layer -in dataset
      現在のレイヤーにプロットを追加する。プロットタイプはnで指定する。(worksheetコマンドを参照)
    * draw {x1,y1,x2,y2}
      グラフに直線や点線などを描画する。
    * worksheet -p n
      アクティブなワークシートの選択領域をプロットする。nはプロットのタイプを指定する。
      n 	type
      200 	line
      201 	scatter
      202 	line+symbol
**データセットの操作に関するコマンドと関数

**ワークシートの操作に関するコマンド
-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データセットにコピーする。(->うまく働かない?)

    * create name -w n c1 c2
      column名c1,c2, row数n を持つ名前nameのワークシートを作る
    * worksheet -d name
      現在アクティブなワークシートの複製をnameという名前で作成する。
    * worksheet -s c1 r1 c2 r2
      アクティブなワークシートのc1 r1 c2 r2で指定される領域を選択する。c1とc2がゼロの場合は
      全てのcolumnが対象となり、r1とr2がゼロの場合は全てのrowが対象となる。 
**グラフ描画に関するコマンド

-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)
      現在activeなワークシートのcolumn COL のdataset名(WKS_COL)を返す
    * wcol(i)
      現在activeなワークシートのi番目の column のdataset名(WKS_COL)を返す
    * %[string, arg]
      文字列の一部分を抜きだす。
      %[string,'ch'] 	文字列の先頭から最初に現れる文字chの前まで。
      %[string,'ch'] 	最初に現れる文字chの次から文字列の最後まで
      %[string,n] 	先頭のn文字
      %[string,m:n] 	m文字目からn文字目まで
      %[string,#n] 	n番目のトークン
      %[string] 	文字列の長さ
    * $(num)
      数値などを文字列に変換する。formatも指定可能。
-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)
      名前nameをもつオブジェクトが存在すればそのオブジェクトの型を番号で返す。
      0 	存在しない
      1 	dataset
      2 	worksheet
      3 	graph window
      4 	variable
      5 	matrix
      6 	macro
      7 	tool
      9 	notes window
    * その他、sin, cos, expなどの数学関数はほとんど使える。
-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に代入できる配列を返す関数
**datasetに代入できる配列を返す関数

    * data( v, v, inc )
      vからvまでincステップの配列を作る。 incを省略するとステップは1になる。
    * { v, v, , v}
      配列を実際の値を使って作る。
    * Fit(dataset)
      直前のフィッティングの結果を用いて、datasetをX値とした配列を作る。
-data( v, v, inc )&br;
vからvまでincステップの配列を作る。 incを省略するとステップは1になる。
-{ v, v, , v}&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/getpw.ogs]]
-[[シフトプロット(複数のデータを適当な間隔で縦に並べて作図):http://optphys.sci.hokudai.ac.jp/~sekika/labtalk/example/shiftplot.ogs]]
-[[カスケードプロット(現在のプロットを上下にずらして再描画する。シフトプロットの改良版):http://optphys.sci.hokudai.ac.jp/~sekika/labtalk/example/cascade.ogs]]


トップ   一覧 検索 最終更新   ヘルプ   最終更新のRSS