文字列の処理String-Processing
これらのサンプルは、長い文字列(この例ではフルパスのファイル名)から、部分文字列(ファイル名)を取得する方法をいくつか示しています。 最後に、2つの文字列を連結する方法を示します。
getFileName()を使って部分文字列を探す
この例では、文字列メソッドは、特定の事例として作成していますが、一般に必要な操作に使うことができます。
// 組込みの文字列メソッド GetFileName()を使用
string fname$="C:\Program Files\Origin 8\Samples\Import\S15-125-03.dat";
string str1$ = fname.GetFileName()$;
str1$=;
reverseFind(), mid()メソッドを使って、部分文字列を探す
ここでは、文字列メソッドを組み合わせて使用します。
// 関数ReverseFind と Mid を使ってファイル名を抽出
string fname$="C:\Program Files\Origin 8\Samples\Import\S15-125-03.dat";
// 右から探すことで、最後の '\' の位置を見つける
int nn=fname.ReverseFind('\');
// その位置の後に開始し、終わりまでの部分文字列を取得
string str2$=fname.Mid(nn1)$;
// ファイル名をスクリプトウィンドウに出力
str2$=;
トークンを使って部分文字列を探す
Token
ここでは、別の一般的な探索方法を使って、操作を完了させます。
// トークンを使って、ファイル名を抽出
string fname$="C:\Program Files\Origin 8\Samples\Import\S15-125-03.dat";
// '\' 記号で区切られたトークンの数を取得
int nn=fname.GetNumTokens('\');
// 最後のトークンを取得
string str3$ = fname.GetToken(nn, '\')$;
// そのトークンの値をスクリプトウィンドウに出力
str3$=;
文字列の連結
'+' 演算子を使って、文字列を連結することができます。以下に示すように行います。
string aa$="reading";
string bb$="he likes " + aa$ + " books";
type "He said " + bb$;
insert 文字列メソッドを使って、2つの文字列を連結することができます。
string aa$ = "Happy";
string bb$ = " Go Lucky";
// 文字列 'aa' を文字列 'bb' に位置1で挿入
bb.insert(1,aa$);
bb$=;
サポートされている文字列メソッドの一覧と説明については、String (オブジェクト)をご覧下さい。
文字列レジスタを使う
文字列レジスタは、より簡単で強力に使うことができますが、文字列変数とそのメソッドに比べ、読み込みが難しくなります。また、これらは、グローバル(セッションスコープ)なので、他のプログラムにより修正されることが少なくなります。
// 2つの文字列を文字列レジスタを使って連結
%A="Left";
%B="Handed";
%N="%A %B";
%N= // "Left Handed"
// 長いファイルパスの文字列からファイル名の部分文字列を抽出
%N="C:\Program Files\Origin 8\Samples\Import\S15-125-03.dat";
for(done=0;done==0; )
{
%M=%[%N,>'\'];
if(%[%M]>0) %N = %M;
else done = 1;
}
%N=;
文字列から数値を抽出
このサンプルは、文字列から数値を抽出する複数の方法を示しています。
// 文字列変数は多くのメソッドをサポート
string fname$="S15-125-03.dat";
int nn=fname.Find('S');
string str1$ = fname.Mid(nn+1, 2)$;
type "1st number = %(str1$)";
string str2$ = fname.Between("-", "-")$;
type "2nd number = %(str2$)";
int nn = fname.ReverseFind('-');
int oo = fname.ReverseFind('.');
string str3$ = fname.Mid(nn + 1, oo - nn - 1)$;
type "3rd number = %(str3$)";
type $(%(str2$) - %(str1$) * %(str3$));
// 文字列レジスタを使って、部分文字列の表記を使用可能
%M = "S15-125-03.dat";
%N = %[%M,2:3]; // 開始と終了を指定
type "1st number = %N";
%N = %[%M,>'S']; // 'S'の後の文字列を探す
%N = %[%N,'-']; // '-'の前の残りを探す
type "1st number = %N";
%O = %[%M,#2,\x2D]; // '-' (16進数で 2D)で区切られた2番目のトークンを探す
type "2nd number = %O";
%P = %[%M,'.']; // 拡張子を取る
%P = %[%P,>'-']; // 最初の '-'の後
%P = %[%P,>'-']; // 2番目の '-'の後
type "3rd number = %P";
type $(%O - %N * %P);
|