LabTalkを使いましょう

目次

Hello World

まず、よく使用されるサンプルを使い、LabTalkスクリプトを実行する方法を紹介します。 この例ではLabTalkコマンドtypeを使用します。なお、OriginのLabTalkコマンドは大文字と小文字を区別しません。

  1. Originを開き、ウィンドウメニューからスクリプトウィンドウを選択します。 スクリプトウィンドウが開きます。
  2. このウィンドウで次のように入力し、Enterキーを押します。
    type "Hello World"
  3. Originは行の最後にセミコロン;を追加し、そのスクリプト行を実行します。
  4. このスクリプト行により、入力したコマンド行の下に直接Hello Worldという文字を出力します。
  5. このスクリプト行を再度実行するには、  ;の前の任意の場所にカーソルを置き、Enterキーを押します。


コマンドは一意である限り省略可能です。次の2つとも動作します。

typ "Hello Word"
ty "Hello World"


では、スクリプトウィンドウで複数の行を実行する方法を確認しましょう。

  1. 次のスクリプトでワークブック情報を出力するので、ワークブックウィンドウをアクティブにします。
  2. スクリプトウィンドウで、次のスクリプト行を;で区切って貼り付けます。
    type "The current workbook is %h";
    type "This book has $(page.nlayers) sheet(s)";
    type "There are $(wks.ncols) columns in the active sheet";
  3. すべての行を強調表示します(マウスを使用する場合は、スクリプトのすべての行をドラッグして選択し、キーボードを使用する場合は、スクリプトの先頭または末尾にカーソルを置き、Shiftキーを押しながら上/下矢印キーを押して、スクリプトのすべての行を選択)。
  4. 選択した全てのスクリプト行を実行するためにEnterキーを押します。
  5. 現在のブック名、ブック内のシート数、アクティブシート内の列数を次のように出力します。
    The current workbook is Book1
    This book has 1 sheet(s)
    There are 2 columns in the active sheet

上記の例の場合、%Hという文字列レジスタを使用しました。これは現在アクティブなウィンドウ名(ワークブック、行列、グラフのいずれか)を保持します。そして、LabTalk オブジェクトpagewksを使用し、ブックのシートの数と、シート内の列数を取得しました。$()は、置換表記の1つで、()内の変数を評価し、その値を返すようOriginに通知します。

スクリプトウィンドウに複数行のスクリプトを入力する場合、

  1. 各行の最後に ; を追加してからEnterを押します。するとOriginは新しい行を開始して入力できるようになります。最後に、全行を選択してEnterキーを押すことで一括で実行できます。
  2. または、スクリプトウィンドウウィンドウメニューの編集:スクリプトの実行のチェックを外します。誤って行を実行せずに、複数行を入力できます。最後に、編集: スクリプトの実行にチェックを付けます。全行を選択してEnterキーを押すことで一括で実行できます。

= 記号を使った素早い出力

= 記号は、通常、左辺と右辺を持ち、代入演算子として使われます。右辺が無い場合、インタプリタが=の左側(左辺)の式を評価し、スクリプトウィンドウに結果を出力します。

左に評価用の数式を表示し、結果をインタラクティブに出力します。

3 + 5 =

Originは計算を行い、結果を次の行に出力します。

3 + 5 = 8

出力文字列レジスタとOriginオブジェクトのプロパティ

 
%H =; //現在のウィンドウ名
wks.ncols=; //列数
wks.col1.name$=; //第一列のショートネーム

現在のウィンドウが1シート2列を持つBook1の場合、上記のスクリプトを実行すると以下のように出力されます。

Book1
wks.ncols=2
A

以下のサンプルでは、LabTalkでの変数の考え方を説明します。変数名は大文字と小文字を区別しません。スクリプトウィンドウに次の代入文を入力します。

double A = 2

これにより変数Aを作成し、Aに2が割り当てられます。そして、変数Aに対してPI(Originで定義される定数\;\pi)を掛けるなどの算術演算を行い、変数Aに再割り当てすることができます。

A = A*PI

現在のAの値を表示するには、次のように入力します。

A =

Enterキーを押すと、次のように値が返ってきます。

A = 6.2831853071796

変数や変数の値のリストを見るListコマンドもあります。以下のコマンドを入力してEnterを押します。

list

Originは、LabTalkの変数と関数ダイアログを開き、Originの変数をすべて表示します。

また、特定のタイプの変数を取得することもできます。

list v

これは、数値変数をリストします。

簡単で便利なコマンド

ワークシート

newbook; //ワークブックを作成
wks.ncols=3; //ワークシートを3列設定
col(B)=2*col(A); //col(B)の値をcol(A)で設定

グラフ

//Y列をあらかじめ選択
plotxy; //選択されたY列を対応するXデータに対してプロット
layer.x.from=5; //X 軸の開始値を設定

スクリプトを実行する他の方法

先程のサンプルでは、スクリプトをスクリプトウィンドウからスクリプトを実行しました。Originには他にもLabTalkスクリプトを整理して実行する機能があります。詳細については LabTalk スクリプトの実行とデバッグの章を確認してください。ここでは、スクリプトを実行するメソッドをいくつか確認します。(1)カスタムルーチンツールバーボタン、(2)カスタムメニューアイテム、(3)グラフページ内のボタンを紹介します。

カスタムルーチンボタン

Originには、スクリプトを保存し、ツールバーのボタンを押すだけで実行する便利な方法があります。

  1. キーボードでCtrl+Shiftキーを押しながら、標準ツールバーカスタムルーチンボタン Button Custom Routine.png を押します。
  2. これによりOriginの標準のスクリプトエディタであるコードビルダが開きます。 編集しているファイルは、Custom.ogsです。 コードには、1つのセクション [Main]があり、以下のスクリプト1行を含みます。
    [Main]
    type -b $General.Userbutton;

    これを次の行で置き換えます。

    [Main]
    type -b "Hello World";
    そして、コードビルダウィンドウの保存Button Save Project.pngボタンをクリックします。
  3. Originのウィンドウに戻り、 Button Custom Routine.pngボタンをクリックします(キーボードショートカット: ALT + F5)。

これにより、OriginはHello Worldのテキストを表示しますが、ここではtypeコマンドに-bスイッチが付いているので、ポップアップウィンドウに表示されます。

カスタムメニューアイテム

LabTalkスクリプトはカスタムメニューアイテムから実行できます。

  1. メニューから環境設定:カスタムメニューオーガナイザを選択してカスタムメニューオーガナイザダイアログを開きます。
  2. カスタムメニュー追加タブを開きます。左側パネルの内部を右クリックし、新しいメインポップアップをコンテキストメニューから選択します。
  3. 右側のパネルでは、ポップアップテキストに名前、例えばMy Menuを入力してから編集ボックスの外側をクリックします。
  4. 左側パネルからMy Menuを選択してから右クリックし、項目の追加をコンテキストメニューから選びます。
  5. 右側のパネルでは、項目テキストHello Worldに変更し、次のスクリプトをLabTalkスクリプトボックスに追加します。
  6. type -b "Hello World";
  7. 閉じるボタンをクリックした後、ポップアップするウィンドウではYesをクリックして、メニューの変更をデフォルトメニューに設定します。開いたファイルダイアログでは、保存ボタンを押し、デフォルト名でデフォルトフォルダ(User Filesフォルダ)に保存します。
  8. これで新しいメニュー(My Menu)がメニューバーのウィンドウメニューの左側に追加されます。この新しいメニューアイテムをクリックし、Hello Worldの項目をドロップダウンから選択します。Hello World と表示されたダイアログがポップアップします。

グラフ内のボタン

Originはグラフやワークシートにボタンを追加する事ができ、そのボタンを押す事でLabTalkスクリプトの実行が可能です。これにより、スクリプトを特定のプロジェクトやウィンドウに保存できます。

  1. 標準ツールバーにある新グラフウィンドウボタン(Button New Graph.png)を押して、新しいグラフを作成します。
  2. プロット作成・オブジェクト操作ツールバーテキストツールボタン(Button Text Tool.png)を押して、新しく作成したグラフをクリックし、テキストMy Buttonを入力します。テキストの入力が終わったら、テキストの外側をクリックして編集を終了します。
  3. テキストを右クリックしてコンテキストメニューを表示し、プロパティを選択してプログラミングタブを開きます。
  4. ダイアログでは、のあとでスクリプトを実行のドロップダウンリストから、ボタンアップを選択し、以下のスクリプトを編集ボックスに入力します。
  5. type -b "Hello World";
  6. OKをクリックして、ダイアログを閉じます。これで、テキストラベルがボタンになりました。ボタンをクリックします。Hello World と表示されたダイアログがポップアップします。

スクリプトサンプル

ここで紹介するスクリプトサンプルでは、インポートとデータ処理に関連する特定のシナリオをステップごとに実行し、プロジェクトを保存します。このサンプルでは、いくつかのLabTalk言語、例えばコマンドオブジェクトXファンクションに焦点を当てています。これらの言語についての詳細は、この後に続く章で説明します。

NOTE: ここでは、コマンド文を実行するためにスクリプトウィンドウを使用します。コードの1行分だけを実行する場合、;は入力せずに、Enterキーを押してください。複数行にわたるコードの場合、各行の末尾に;を入力してからEnterを押すと、そのまま入力を続ける事ができます。全ての行を入力後、行を全選択してEnterキーを押すと実行します。

それではdocコマンドと-nスイッチを使用して、新しいプロジェクトを始めましょう。現在のプロジェクトを保存する必要がある場合、このコマンドはユーザに保存をするように促します。

doc -n

サンプルフォルダからデータファイルをインポートしましょう。インポートするファイルを参照するために、Xファンクションdlgfile を使用します。

dlgfile gr:=ASCII

インストールフォルダの、\Samples\Import and Export サブフォルダから、S15-125-03.datを選択し、開くをクリックします。

上記操作により、ファイルのパスをロードし、fname$変数にファイル名が入力されます。この変数の値を確認するには、以下のコードを実行します。

fname$=

このファイルをアクティブなワークブックにインポートします。impasc Xファンクションを命名制御オプションと共に使用し、ファイル名はワークブック名に設定されません。

impasc Options.Names.FNameToBk:=0

では、Position列のデータを処理しましょう。まず、範囲変数を定義し、この列を指定します。

range rpos = "Position"

指定する列は、現在のワークシートの4番目の列なので、インデックス番号を使用し、以下のように定義することもできます。

range rpos = 4

次のコマンドを使用すると、範囲変数に現在定義されている値を確認できます。

list a

列データを正規化し、データが0から100までの値をになるようにします。正規化に必要なXファンクションを確認するには、次のコマンドを使用します。

lx *norm*

このコマンドで、Xファンクション名にnormを含むものが表示されます。データを正規化するXファンクションは複数あります。今回の例では、rnormalizeXファンクションを使用します。

このXファンクションのシンタックスに関するヘルプを参照するには、以下のように入力します。

rnormalize -h

これにより、情報が一覧表示されます。あるいは、以下のように入力します。

help rnormalize

これにより、ヘルプファイルが開きます。

では、position列を正規化します。

rnormalize irng:=rpos method:=range100 orng:=<input>

正規化データは同じ列、つまり、元のデータを置き換えて出力されます。これは出力範囲変数 orng<input>に設定したためです。

Xファンクションを使用する場合、正しい順序で変数値を指定している時は、変数名を入力する必要はありません。つまり、上記コマンドは次のように省略して記述できます。

rnormalize rpos range100 orng:=<input>

ここでもorngを指定した理由は、この変数に先立つ他の変数があるからです。それらの変数は、ここで行いたい計算には関係ないため、今回のコマンドには含めていません。


次に、プロジェクト中のフォルダに変更を加えます。プロジェクトを管理するいくつかのXファンクションがあり、そのうちのいくつかを使用します。

// 現在のワークシート名を取得
string name$ = wks.name$;
// ルートフォルダに移動
pe_cd ..;
// Folder1をワークシートと同じ名前にする
pe_rename Folder1 name$;

では、ルートフォルダにある全てのサブフォルダとワークブックをリストしましょう。

pe_dir

最後に、OriginプロジェクトUser Filesフォルダに保存します。User Filesフォルダの場所は文字列レジスタ%Yに保存されています。この変数を確認すると、User Filesフォルダの場所を確認できます。

%Y =

saveコマンドを使用し、現在のプロジェクトをMyProject.opjという名前でUser Filesフォルダに保存します。

save %yMyProject

上記コマンドの%YはUser Filesフォルダのパスに置き換えられ、このプロジェクトはこのパスに保存されます。

CTRL + SHIFTを利用してメニューコマンドとツールバーボタンのスクリプトをキャプチャする

Originのメニューコマンドやツールバーボタンなど、GUIの機能はLab Talkのスクリプトで実行することができます。次の方法で、スクリプトを確認できます。

  1. キーボードのCTRL + SHIFTを押しながら、
  2. メニューコマンドかツールバーボタンをクリックします。

これは、自分でスクリプトを作る時に便利です。

Origin 2024b以降CTRL+SHIFTによるミニツールバーボタンスクリプトのコピーが可能です。

  1. 新規ワークブックを開き、列AとBを選択・右クリックして、列値の一律設定: 行番号を選択します。
  2. ワークシートがアクティブになっていることを確認して、CTRL + SHIFTを押して散布図ツールバーボタンButton Scatter.pngをクリックします。(または、作図 > 2D: 散布図: 散布図を選択します。)

すると、次の2つが実行されます。

Menu id=33248 (0x81e0)
run.section(Plot,Scatter)

このスクリプトの情報をもとに、自分で折れ線グラフのスクリプトを作成できます。このスクリプトの動作を確認するには、行番号の入った2列がアクティブなことを確認して、スクリプトウィンドウを開き(ウィンドウ: スクリプトウィンドウ)、次のいずれかを入力してエンターキーを押します。

menu -e 33248
run.section(Plot, Scatter)


詳細は、次のトピックをご覧ください。

これから行うこと

LabTalkスクリプトガイドの残りの項目を学習することが重要です。 上述の例は、表面的なものですが、LabTalkの学習を始めるにあたっては十分な情報といえます。次の章では、LabTalkを学ぶ上で便利なリソースの一覧を表示します。