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

はじめに

文字列レジスタは、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コマンドで設定された現在の作業ディレクトリ。(Origin 8以降)
 %E 最近選択したワークシートを含むウィンドウの名前
 %F フィッティングセッションに現在含まれているデータセットの名前。
 %G 現在のプロジェクト名
 %H 現在のアクティブウィンドウのタイトル
 %I 現在の基線のデータセット
 %X 現在のプロジェクトのパス
 %Y

user.INIファイルおよびその他のカスタマイズ可能なファイルが保存されているUser Filesフォルダへのフルパス名。%Y はOriginを初回起動時に選択した場所によって、各ユーザごとに別々に設定することができます。

Origin 7.5より前のバージョンでは、user .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 最後にアクティブになったウィンドウのショートネーム。
 %@J Origin EXEフォルダのパス(下記の%@O参照)。
 %@L OriginLabソフトウェアライセンスの所有者名。
 %@M 拡張子を含む、新しく追加されたファイルパス。
 %@N 表示、非表示、削除にかかわらず、最も新しく作成されたウィンドウの名前。%Hはこれとは異なり、アクティブウィンドウの名前を格納します。
 %@O Origin.EXEの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となるからです。

部分文字列表記

部分文字列表記 %[ string, [argument1], [argument2] ] は、引数または引数1と引数2で指定された部分文字列がない場合、文字列の長さを返します。

行うこと 引数 入力スクリプト 戻り値
文字列の長さを返します。文字列を引用符で囲まない場合、両側のスペースは無視されます NA
%A="     hello     "; 
type %[%A];
%B=     hello     ;
type %[%B];
15 
5
文字を検索し、その文字の左にあるすべてのテキストを返します。 '<char>'
%A = "Results from Data2_Test";
%B = %[%A, '_']; 
%B =
Results from Data2
文字を検索し、その文字の右側にあるすべてのテキストを返します。 >'<char>'
%A = "Results from Data2_Test";
%B = %[%A, >'_']; %B =
Test
n番目の文字位置の左側にあるすべてのテキストを返します。 n
%A = "Results from Data2_Test";
%B = %[%A, 8]; %B =
Results
指定された2つの文字位置の間 n:m (両端を含む) のすべてのテキストを返します。 14:18
%A = "Results from Data2_Test"; 
%B = %[%A, 14:18]; %B =
Data2
左から数えて#nトークンを返します。 #n
%A = "Results from Data2_Test"; 
%B = %[%A, #2]; %B =
from
@n行目を返す。 @n
%A = "First line
second line";
%Z = %[%A, @2];
%Z=;
%A文字列の2行目を%Zに割り当て
指定された区切り文字に基づいて部分文字列を返します。 #n , <separator>
%A = 123	342	456;
for (ii = 1; ii <= 3; ii++)
{
   Book1_A[ii] = %[%A, #ii,\t]
};
Book1 の列 A は
123
342
456

トークンについての注意

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

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

この場合、スクリプトウィンドウに次のように入力します。

スクリプト 戻り値
%B = %[%A, #1]; %B=
These
%B = %[%A, #2]; %B=
are all
%B = %[%A, #3]; %B=
different tokens