文字列の処理

内容

文字列メソッドを使う

これらのサンプルは、長い文字列(この例ではフルパスのファイル名)から、部分文字列(ファイル名)を取得する方法をいくつか示しています。 最後に、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$=;

トークンを使って部分文字列を探す

ここでは、別の一般的な探索方法を使って、操作を完了させます。

// トークンを使って、ファイル名を抽出

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);