文字レジスタと文字列レジスタ置換

はじめに

文字列レジスタは、Originで文字データを扱う方法の1つです。 V8.0より前のバージョンでは、これが唯一の方法で、現在のOriginのバージョンでも使うことができます。 しかし、文字列処理ルーチンを適切な文字列変数に移行することをお勧めします。使用の比較については文字列の処理をご覧下さい。

長年、文字列レジスタ名が%文字とそれに続く一つのアルファベット文字(AからZまでの文字)で構成されていることが、LabTalkスクリプト作成者に知られています。これらの基本となる26個の文字列レジスタ、すなわち%A-%Zのうち、いくつかはシステム文字列レジスタとして予約されています(以下の表にリストアップされています)。

Origin 2016 SR2以降、必要に応じて "%@N"個の読み取り専用のシステム文字列レジスタが追加されています。これらは元の "%N"文字列レジスタの下の2番目の表にリストアップされています。

文字列レジスタはグローバルスコープであり、これは、いつでも、どのスクリプトでも変更できることを意味しています。 これは役に立つこともありますが、あるスクリプトが別のスクリプトで使われている文字列レジスタの値を変更し、エラーや予期せぬ結果を招くので、使用には注意が必要です。

いくつかの文字レジスタはシステム変数として予約されており、自作のスクリプトでそれらに値を代入しようとするとエラーが発生する可能性があります。 それらは、%C-%I、および%X-%Zの範囲でグループ化されるか、または前に%@が付きます(例:%@A = Appsルートフォルダ)。詳しくは以下の表を確認してください。

システム変数としての文字列レジスタ

文字列レジスタは最大260バイト文字保持します(%Zは最大6290保持します)。文字列レジスタ名は、%文字(または%@)とそれに続く単一の英字(AからZまでの文字)で構成されます。 このため文字列レジスタは、%変数としても知られています。

%文字列レジスタ

26個の文字列レジスタのうち、下表の特別な意味を持つシステム変数として予約され、これはスクリプト内で再割り当てをしてはいけません。 しかし、これらが保持している値にアクセスしたり、操作する場合に、役立ちます。

 %変数 説明
 %C 現在のアクティブデータセットの名前
 %D 現在の作業ディレクトリ, cdコマンドでセットされる(Origin8で新しく追加)
 %E 最近選択したワークシートを含むウィンドウの名前
 %F 現在のフィッティングセッションにあるデータセットの名前
 %G 現在のプロジェクト名
 %H 現在のアクティブウィンドウのタイトル
 %I 現在の基線のデータセット
 %X 現在のプロジェクトのパス
 %Y=

User Filesフォルダへのフルパス名。ユーザの.INIファイルやその他ユーザが編集したファイルがある場所。%Y はOriginを初回起動時に選択した場所によって、各ユーザごとに別々に設定することができます。

Origin 7.5より前は、さまざまなユーザのINIファイルはOrigin.EXEがある場所にありました。 Origin7.5から、1つのPCで複数ユーザが使えるように、User Filesフォルダを作成することをサポートしています。

OriginのEXEのパス(プログラムパス)を取得するには、以下のLabTalkステートメントを使います。

%a = system.path.program$
                        

Origin Cでは、GetAppPath()関数へ適切な引数を渡します(INIパスまたはEXEパスを返すためです)。

 %Z 長い文字列を一時的に保存する領域(最大6290バイト文字)。


システム変数を含む文字列レジスタは、名前が利用可能であれば、どこでも使用することができます。システム文字列レジスタに値を再割り当てするべきではないですが、それらが保存するシステム値にアクセスする(または操作する)と便利なことがよくあります。

//現在のアクティブなワークシートを削除:
del %C;

%@文字列レジスタ

Origin 2016 SR2以降では、%@文字とそれに続く一つの英字で構成される読み取り専用のシステム文字列レジスタが追加されました。

 %@変数 説明
 %@A アプリのルートインストールフォルダ。
 %@B OriginLabのAppDataフォルダ。
 %@C コンピュータ名。
 %@D Origin操作のデータと設定が保存されているProgramDataフォルダ。
 %@E グループリーダーのマシンのグループフォルダのパス詳しくはSet Group Folder Location Dialogを参照してください。
 %@F アクティブなプロジェクトエクスプローラのフォルダの名前。
 %@G アクティブなグラフシート(シートとしてワークブックに追加されたグラフ)のグラフページショートネーム。このタイプのシートでない場合、または含まれているグラフがない場合は空です。
 %@H グラフや行列が埋め込まれているアクティブなページを含むブックの名前。
 %@I 最後にアクティブになったウィンドウのショートネーム。
 %@L OriginLabソフトウェアライセンスの所有者名。
 %@M 拡張子を含む、新しく追加されたファイルパス。
 %@N 表示、非表示、削除にかかわらず、最も新しく作成されたウィンドウの名前。%Hはこれとは異なり、アクティブウィンドウの名前を格納します。
 %@O Origin.EXEのEXEの名前を含めたフルパス。32-bitまたは64-bitのどちらのバージョンでも動作します。もし両方のバージョンがインストールされている場合は、%@Oは実行しているEXEのパスを返します。
 %@P アクティブなフォルダのプロジェクトエクスプローラのフルパス。
 %@Q 現在のOriginプロジェクトファイルの拡張子(小文字のopjまたはopju)。
 %@R Originがパッチファイル(\Updates) やヘルプファイル(\Updates) をダウンロードして保存するProgramData のルートフォルダ。メニューのへルプ: フォルダを開く:プログラムデータフォルダで開くものと同じです。
 %@S インストール中のOriginセットアップダイアログボックスで入力されたユーザ名。
 %@T アクティブなグラフシート(シートとしてワークブックに追加されたグラフ)のタイトル(存在する場合はショートネーム + ロングネーム)。このタイプのシートでない場合、または含まれているグラフがない場合は空です。グラフにロングネーム無い場合は%@Gと同じです。
 %@U プロジェクトの未保存ファイルのパス。
 %@V 一時保存フォルダ。このフォルダはプロジェクトの保存中にファイルを保存するために使用されます。
 %@W インストール中のOriginセットアップダイアログボックスで入力された会社名。
 %@X 現在実行中のAppsフォルダ。
 %@Y ユーザのAppDataルートフォルダ。このフォルダには、インストールされているアプリとそのバージョン番号をリストしたxmlファイルが格納されています。

文字列変数としての文字列レジスタ

スクリプトの実行中に文字列レジスタの内容が置換される文字列レジスタを使う方法は置換の最も単純な形式です。文字列変数が導入される前は、古いスクリプトでのみ文字列レジスタが使用されていました(Origin 8)。以下のシステム変数を除く文字列レジスタは、文字列レジスタを文字列変数として使用できます。以下ご参照ください。

文字列変数への値の代入

例えば、スクリプトウィンドウに次の代入文を入力して下さい。

%A = John

上記は、文字列レジスタ%A の内容をJohnにします。

文字列変数は置換表記で使うこともできます。 置換表記を使って、次の代入文をスクリプトウィンドウに入力します。

%B = %A F Smith

これは%Bの内容を John F Smithにします。 つまり、代入演算子の右側で文字列変数が評価されると、その結果が代入演算子の左側の識別子に割り当てられます。

数値変数のように使うことができます。スクリプトウィンドウに次の代入文を入力して下さい。

%B =

Originは変数の値を返します。

John F Smith

割り当て前の変数の評価

小括弧()で囲むと、代入演算子の左辺の文字列変数は、代入される前にいったん評価されます。例えば、次の代入文をスクリプトウィンドウに入力します。

%B = Book1_A

このスクリプトにより、値Book1_Aが、文字列レジスタ%Bに割り当てられます。 Book1_Aがデータセット名だとして、スクリプトウィンドウに次の代入文を入力します。次の例を見てください。

(%B) = 2*%B

これにより、データセットの結果として、2が掛けられた値に更新されます。しかし、文字列レジスタ%Bの内容は、文字列Book1_Aのままです。

文字列の比較

文字列レジスタの比較をするには、等価演算子(==)による比較を使用します。

  • 文字列レジスタが引用符で囲まれていると(例えば"%a")、Originは変数名を構成する文字列を文字通りに比較します。例えば、
aaa = 4;
bbb = 4;
%A = aaa;
%B = bbb;
if ("%A" == "%B")
    type "YES";
else
    type "NO";

この例の結果はNOとなります。なぜならば、この比較式の場合、文字列変数の文字を比較するので、aaa !=bbbとなります。

  • 文字列レジスタが引用符で囲まれていないと(例えば%A)、Originは文字列レジスタに含まれる変数の値を比較します。 例:
aaa = 4;
bbb = 4;
%A = aaa;
%B = bbb;
if (%A == %B)
    type "YES";
else
    type "NO"

この例の結果はYESとなります。なぜならば、この比較式は、得られた(数値)変数の内容を比較しているので、aaa==bbb==4となるからです。

部分文字列

部分文字列 (substring)表記は、その文字列ある特定の部分とまります。 部分文字列の一般的な形式は、下のような構文をしています。

%[string, argument];

ここで、string は、文字列そのものであり、argumentは、どの部分の文字列を返すのかを指定します。

例を挙げてみましょう。次の代入文をスクリプトウィンドウに入力しましょう。

%A = "Results from Data2_Test"

以下に、この%Aの部分文字列におけるargumentの指定の仕方を説明します。

以下を行うには 入力するスクリプト 返される値
文字を検索し、その文字の左側にある全てのテキストを返す。
%B = %[%A, '_']; %B =
                
Results from Data2
文字を検索し、その文字の右側にある全てのテキストを返す。
%B = %[%A, >'_']; %B =
                
Test
指定された文字位置の左側にある全ての文字を返す。
%B = %[%A, 8]; %B =
                
Results
指定された2つの文字の間(指定された位置を含む)にある全ての文字を返す。
%B = %[%A, 14:18]; %B =
                
Data2
左から数えて#nトークンを返す。
%B = %[%A, #2]; %B =
                
from
文字列の長さ(文字数)を返す。
ii = %[%A]; ii =
                
ii = 23

以下は、部分文字列の別の例です。

以下を行うには 入力するスクリプト 返される値
指定された区切り記号(この例の場合は、タブ(\t))で区切られた、i番目のトークンを返す。
%A = 123 342        456;
for (ii = 1; ii <= 3; ii++)
{
   Book1_A[ii] = %[%A, #ii,\t]
};
Book1_a[1]123の値を、Book1_a[2]342の値を、Book1_a[3]456の値を入れます。
@n行目を返す。
%Z = "First line
second line";
%A = %[%Z, @2];
                
文字列%Zの2行目を文字列%Aに代入これを確認するには、%A=をスクリプトウィンドウに入力します。

Note:

引用符の部分文字列や置換表記への使用する場合、

  • スペースは1つの文字とみなされ、無視されません
  • 文字列の長さ(バイト数)は、スペースも1文字として数えます。

例えば、%A5をセットして、%Aの長さを見るには、スクリプトウィンドウに次のように入力して、Enterを押します。

%A = " 5 ";
ii = %[%A];
ii = ;

Originは ii = 3のように返します。

トークンについての注意

トークンとは、ホワイトスペース(スペース又はタブ)、丸括弧(...)、カギ括弧[...]、引用符(")で囲まれた文字群のことです。 例えば、次のトークン群について考えてみます。

%A = These (are all) "different tokens"

スクリプトウィンドウに以下のようにスクリプトを入力すると、

スクリプト 返される値
%B = %[%A, #1]; %B=
                
These
%B = %[%A, #2]; %B=
                
are all
%B = %[%A, #3]; %B=
                
different tokens