ファイルから

LabTalkスクリプトは通常、Originオブジェクトを要求し、開いたプロジェクトに制限されます。スクリプトはファイルに保存され、どのプロジェクトからでも呼び出すことができます。スクリプトファイルは5つの引数まで、共に呼び出すことができます。このセクションは、ファイルに保存したLabTalkスクリプトの使用の概要です。

スクリプトファイルを作成/保存する

LabTalkスクリプトは、Originの コードビルダを含むテキストエディタで作成し、保存できます。コードビルダを開くには、標準ツールバーの Button Code Builder.png ボタンをクリックします。 エディタウィンドウにコードを入力したり、貼り付けて新しいドキュメントを作成し、フォルダおよびファイル名を付けて保存します(OGSという拡張子になります)。

OGSファイルの拡張子

LabTalkスクリプトは、ファイルに保存でき、どんな拡張子でも構いませんが、 OGS という拡張子が標準のもので、柔軟性が高くなります。ですので、OGSファイルを使うことをお勧めします。 ファイルシステムのアクセス可能なフォルダにスクリプトファイルを保存できますが、特定の位置にするといくつかの利点があります。 OGSファイルがUser Filesフォルダにある場合、スクリプトを実行する際に、パスを指定する必要はありません。

OGSファイルは、ファイルとしてディスクに保存するのではなく、Originプロジェクト(OPJ)に付加することができます。 ファイルはコードビルダのProject ノードに追加することができ、プロジェクトと一緒に保存できます。保存の際には、ユーザフォルダからファイルをドラッグし、プロジェクトフォルダにドロップします。このように接続されたOGSファイル内のスクリプトのセクションをファイル内のセクションを呼び出すのと同様、 run.section() オブジェクトメソッド を使って呼び出すことができます。Originは最初にプロジェクト内のファイルを探すので、ファイル名だけを指定する必要があります。プロジェクトに接続したファイルとセクションが見つかったらコードを実行します。

OGSファイル内のセクション

コードがモジュール方式で書かれていると、スクリプトの実行は分かりやすく、デバッグもしやすくなります。 モジュールスクリプトをサポートするため、LabTalkスクリプトファイルをセクションに分割します。セクションは各括弧[ ]の中にセクション名を付けて宣言します。

[SectionName]

セクション宣言の下のスクリプト行がそのセクションに属します。セクション内のLabTalkスクリプトは、別のセクション宣言が見つかったとき、returnステートメントが実行されたとき、コマンドエラーが発生したときに終了します。通常、複数のセクションを持つOGSファイルのフレームワークは次のようなものです。

[Main]
// スクリプト行
ty In section Main;
 
[Section 1]
// スクリプト行
ty In section 1;
 
[Section 2]
// スクリプト行
ty In section 2;

ここで、tytype コマンドのことで、文字'ty'で始まるコマンドが他に存在しない場合、このように省略することができます。

OGSファイルを実行する

スクリプトファイルの実行にはrun オブジェクト を使用します。

run.section(OGSFileName, SectionName[,arg1 arg2 ... arg5])
run.file(OGSFileName)
重要な注意点:

以前のコマンドオブジェクトまたはrunコマンドメソッドより堅牢なので、run.file()run.section()メソッドを使用してLabTalkOGSファイルを実行することを強くお勧めします。

runオブジェクトを使用するときに、OGSファイルがユーザファイルフォルダにある場合は、ファイルへのパスを指定する必要はありません。UFFのサブフォルダにある場合は、相対パスを使用します。UFF外にある場合は、フルパスでファイルを指定します。


つまり、test.ogs ファイルを呼び出すファイルがユーザファイルフォルダにある場合

// run.section() シンタックスを使って、test.ogsの section1 のみ実行
run.section(test, section1)
// run.file()構文を使用してtest.ogsを実行:
run.file(test)

スクリプトに引数を渡す

run.section() オブジェクトメソッドを使って、スクリプトファイル(またはそのセクションの1つ)またはマクロを呼び出すとき、引数を渡すことができます。 引数は、テキスト、数値、数値変数、文字列変数のいずれかです。

引数をスクリプトファイルセクションやマクロに引き渡す際

  • セクションやマクロの呼び出しで、引数と引数の間はスペースで区切る必要があります。run.sectionを使う場合、カンマは、最初の引数からセクション名を区切ります。
  • 引数がテキスト、あるいは文字列変数の場合、個々の引数は(内容が1語以上、又は負の数の場合)2重引用符で囲まれている必要があります。 数値や数値変数を引き渡す場合は、値が負の数の時を除いて、2重引用符で囲む必要はありません。
  • スクリプトファイルセクションやマクロに引き渡せる引数の数は、スペースで区切った5つまでです。引き渡された引数は、スクリプトファイルセクション、または、マクロの定義内の引数の受け渡し変数に置かれます。 引数の受け渡し変数には%1,%2,%3,%4,%5があります。最初に引き渡された引数は%1に、2番目の引数は%2に、といった要領で、割当てが行なわれます。受け渡し変数は文字列変数と同じような働きをします。つまり、これらの変数は、埋め込まれているコマンドの実行前に置換されます。引き渡された引数の数はmacro.narg に登録されます。

文字列を%1, %2, などが受け取る引数として渡すサンプルです。TEST.OGSファイルには次のセクションが含まれます。

[output]
type "%1 %2 %3";

次のスクリプトを実行したとします。

run.section(test.ogs, output, "Hello World" from LabTalk);

ここで、%1には"Hello World"、%2には"from"、%3には"LabTalk"が、引き渡たされます。 文字列の置換後、typeコマンドによってスクリプトウィンドウに出力されます。

Hello World from LabTalk

をスクリプトウィンドウに出力します。 もし、スクリプトファイルセクション呼び出し内で、2重引用符が省略されると、%1に"Hello",%2に"World",%3に"from"が受け渡されてしまい、Hello World fromとなり、 Originは次のように出力します。

Hello World from

数値変数の参照による引き渡し

数値変数引数の参照による引き渡しは、スクリプトファイルセクションやマクロの中から、元の変数の値の変更を可能にします。

例えば、あるアプリケーションでLastRowという変数が、値を含む列B内の最後の行番号を保持しているものとします。 更に、現在のLastRowの値が10だとします。 列Bに5つの値を(現在の最後の行に)追加するようなスクリプトファイルセクションに、変数LastRowを引き渡したとします。値の追加後、スクリプトファイルセクションによって、変数LastRowの値を増やして、LastRowの値を15に更新することができます。

サンプル:

つまり、TEST.OGSが次のようなadddataセクションを含んでいるとします。

[adddata]	
	loop (n, 1, 5)
	{
	    %1[%2 + n] = 100;
	};
	%2 = %2 + (n - 1);
	return 0;

次に以下のスクリプトを実行するとします。

col(b) = data(1, 10);   // データ1_b を値で埋める
get col(b) -e lastrow;  // lastrowに最後の行の値を入れる
run.section(test.ogs, adddata, col(b) lastrow);
lastrow = ;

変数LastRowは参照によって引き渡され、値に15を持つように更新されます。

数値変数の値による引き渡し

数値変数引数の値による引き渡しは、置換表記$()を使って行われます。 この表記法は、引数をスクリプトファイルセクション、又はマクロに引き渡す前に、インタープリタに引数の評価を強制します。 この引き渡しのテクニックは、計算の結果値を変更せずそのまま後で使うような場合に有効です。 それに引き換え、引数が参照によって引き渡されると、式が解釈される度に、式全体が計算されます。

次のスクリプトファイルのサンプルでは、数値変数 var が参照および値で渡されます。%1は、参照で渡される引数を保持し、%2は値で渡される引数を保持します。更に、2語からなる文字列変数(%A)も1つの引数として%3に引き渡されています。

[typing]
	type -b "The value of %1 = %2 %3";
	return 0;

セクションをTest.OGSに保存し、コマンドウィンドウで次のスクリプトを実行します。

var = 22;
%A = "degrees Celsius";
run.section(test.ogs, typing, var $(var) "%A");

すると、"The value of var = 22 degrees Celsius"と表示したダイアログが開きます。

OGSファイルとセクションの名前のガイドライン

OGSスクリプトファイルの命名規則は、その呼び出し方によって異なります。 上記のセクションでは、2つの方法を説明しています。run.section() メソッドまたはcommandメソッドを使った呼び出しとスクリプトまたはコマンドウィンドウからの呼び出し (コマンド による方法)です。

Run.section() メソッドを使うとき

  • OGSファイルの名前に使用する文字の種類や長さには制限がありません。
  • OGSという拡張子を持つファイルに対し、ファイルの拡張子の指定は任意です。
  • OGSファイル内でrun.section( )を使って同じOGSファイルの別のセクションを呼び出すとき、ファイル名を省略できます。例えば
[main]
run.section( , calculate);

[calculate]
cc = aa + bb;

コマンドによる方法を使うとき

  • OGSファイルの名前は、コマンド名の制限準拠している必要があります。制限とは、25文字以下で、数字または特殊文字で始まらず、スペースまたはアンダースコア文字を含めない、というものです。
  • ファイル名の拡張子はOGSにしなければならず、指定する必要はありません

セクション名の規則(どちらかの方法を使うとき)

  • セクション名が省略されているとき
  1. Originは [Main] というセクションを探し、それが見つかると実行します。
  2. [Main]セクションが見つからず、セクションの名前のないファイルの最初にコードがある場合は、そのコードを実行します。
  3. 何もない場合には、Originは何も実行せずエラーも出ません。

OGSファイルは、既存のOriginの関数Xファンクションと同じ名前にすることはできません。

パスを設定する

Origin7.5では、スクリプトファイル(.OGS)はOriginシステムとUser Filesフォルダの両方から実行できました。これがデフォルトで現在の作業フォルダにあたります。スクリプトファイルがそこにあれば、パスを変更する必要はありません。しかし、スクリプトファイルが、これら2つのフォルダのどちらにも存在しない場合、 run.section()オブジェクトメソッド フルパスで指定する必要がありました。Origin 8以降、現在の作業フォルダ(CWF)という考えが導入され、選択したCWFの場所で、スクリプトファイルやXファンクションを実行することができます。

MS-DOSでの慣習にならい、Originでも cd Xファンクションを使ってCWFを表示することができます。

// このコマンドを入力し、スクリプトウィンドウに 
//現在の作業フォルダを表示
cd

デフォルトから変更されていない限り、出力は以下のようなディレクトリです。

現ワーキングディレクトリ:
C:\Documents and Settings\User\My Documents\OriginLab\Origin8.1\User Files\ 

しかし、多くのスクリプトを書いていると、ファイルをフォルダ内に統合し、そのファイルが存在する場所からスクリプトを呼び出します。 また、Originはそれぞれのディレクトリから実行できるサンプルスクリプトを提供しています。

run.section( )スクリプトがUser Filesフォルダのサブフォルダにある場合、相対リファレンスを使う事ができます。例えば、

run.section(subfolder1\scriptA,main); // ScriptA.ogs は subfolder1にある
run.section(subfolder2\scriptA,main); // ScriptA.ogs は subfolder2にある

スクリプトを使用して、現在の作業フォルダをセットできます。 例えば、OriginのシステムサブフォルダSamples\LabTalk Script Examplesにある、ave_curves.ogsというOGSファイルを実行するために、次のスクリプトを実行します。

// 文字列変数を作成し、目的のスクリプトファイルに
//Originのシステムパスにフォルダのパスを追加して
// 完全なパスを保持する 

path$ = system.path.program$ + "Samples\LabTalk Script Examples\";
// 目的のパスを現在の作業フォルダに設定
cd path$;
// 関数を呼び出す
ave_curves;

事前定義のパスのセットを作成できます。cdset Xファンクションは、事前定義したパスを全てリストし、CWFを追加/削除することができます。次のように入力します。

//  'cdset' コマンドはスクリプトウィンドウに 
//事前定義のパスを表示
cdset

まだ変更していないならば、以下のようなパスが表示されます。

1 = C:\Documents and Settings\User\My Documents\OriginLab\Origin8.1\User Files\
2 = C:\Program Files\OriginLab\Origin81\Samples\LabTalk Script Examples\
3 = C:\Program Files\OriginLab\Origin81\ 

上記の2番目のパスをCWFにセットするには、次のように入力します。

// CWFを事前定義パス2に変更
cd 2

事前定義してあるフォルダセットに、新しいパスを追加するには、新しいパスを変更し、次にcdset Xファンクションを特定のインデックスでセットします。例えば、

cd D:\Files\Filetype\Script;  // このパスを CWFとしてセット
// このパスを事前定義リスト4番目の位置(index 4)に追加
// 既にindex 4がある場合、上書き
cdset 4;
// CWFが手動で変更された場合、次のように再セット可能
// 'cd 4'と入力する事で以下のように再セット可能 'D:\Files\Filetype\Script\' 

cdset コマンドの操作については、知っておくと便利なポイントがいくつかあります。

  • あるプロジェクトで事前定義パスに新しいパスを追加すると、それは保存され、別のプロジェクトでも使用できます。
  • 現在のパスをスクリプトウィンドウに表示するには、スクリプトウィンドウで 'cdset' と入力します。
  • 最大9つまでのパスを定義することができます。
  • インデックス番号を自分で割り当てることはできません。
  • 現在のパスが存在しているインデックスに新しいパスを割り当てると、現在のパスが上書きされます。

上記で記載された3つの事前定義パスで、2つ目は複数のスクリプトのファイルを有します(拡張子OGS)。DOSと同じように、cd 2でこのフォルダに移動できます。有効なOGSの確認にはdir Xファンクションを使う事ができます。そして使用可能なスクリプトを実行します。

// 2番目のフォルダを CWFとしてセット
cd 2;
// CWF内の全ての ogsとXファンクションをリスト
dir;
// スクリプトファイルの実行
// 呼び出す時にファイルの拡張子は必要ない
autofit;

また、 ed.open()メソッドを使用すると、CWFのスクリプトファイルをコードビルダにロードできます。例えば、次のようになります。

// この場合、ファイル名のOGS拡張子が必要です
ed.open(pick_bad_data.ogs)

Origin CからLabTalkを実行する

.OGSファイルを直接実行するだけでなく、LabTalkコマンドおよびスクリプトはOrigin Cから実行することもできます。詳細については、Origin Cヘルプファイルの LabTalkインターフェース のグローバル関数をご覧ください。