@Compare (式言語)

2 つのリストの要素のアルファベット順を、並列演算によって比較します。

注: この @ 関数は、Release 6 で新しく追加されました。

構文

@Compare( textlist ; textlist ; [ options ] )

パラメータ

textlist

文字列リスト。最初の 2 つのパラメータは文字列リストです。一方のリストが短いとき、長い方のリストと同じ長さになるまで、短い方のリストの最後の要素が繰り返されます。各リストの対応する要素が比較されます。

[ options ]

キーワードリスト。以下のキーワードを指定できます。指定したオプションが競合する場合は、最後に指定したオプションが有効になります。

[CASESENSITIVE] (デフォルト)

[CASEINSENSITIVE]

[ACCENTSENSITIVE] (デフォルト)

[ACCENTINSENSITIVE]

[PITCHSENSITIVE] (デフォルト)

[PITCHINSENSITIVE]

戻り値

result

数値リスト。各要素は文字列リストの対応する要素を比較した結果で、次の 3 つのいずれかの値となります。

使用法

英語文字セットの比較順序は次のとおりです。アポストロフィ、ダッシュ、0 から 9 までの数字、a から z と A から Z までの英字、残りの特殊文字の順です。英字の比較順序は順番どおりであり、小文字が先で、 a、A、b、B、というように z、Z まで続きます。このような順で比較されるため、例えば「New Boston」より「new york」が先であるという変則的な結果が生じることがあります。このような動作の問題を解消するには、[CaseInsensitive] オプションを使用するか、@UpperCase@LowerCase@ProperCase を使用します。

ソートオプションとして Unicode スタンダードソートを設定しているときは、次のキーワードや組み合わせは選択できません。

Unicode スタンダードソートを指定するには、notes.ini の変数 $CollationType を @UCA に設定するか、以下のダイアログボックスの [Unicode スタンダードソート] チェックボックスをオンにします。

*デフォルトのソート順序が選択されていない場合は、[データベースのプロパティ] インフォボックスと [設計のプロパティ] インフォボックスの Unicode オプションは無効化されます。

Unicode ソートの詳細については、http://oss.software.ibm.com/icu/ を参照してください。

  1. このアクションはリストを値「N」と比較し、その結果を表示します。Boston と Moscow の結果は -1 (N より小さい)、Tokyo は 1 (N より大きい)、n と N は 0 です。
    list := "Boston" : "Tokyo" : "Moscow" : "N" : "n";
    result := @text(@compare(list; "N"; [CaseInsensitive]));
    @Prompt([OKCANCELLIST] : [NOSORT]; 
    "Result"; ""; ""; list + " (" + result + ")")
  2. 次の計算結果フィールド式は、2 つの複数値フィールド [Name1] と [Name2] を比較し、結果を値として通知します。文字列は結果の数値で置き換えられます。
    @If(Names1 = "" | Names2 = ""; ""; @do(
    comp1 := @Compare(Names1; Names2;
    [CASEINSENSITIVE] : [ACCENTINSENSITIVE]);
    comp2 := @Replace(@Text(comp1); "-1" : "0" : "1";
    " is less than " : " is equal to " : " is greater than ");
    Names1 + comp2 + Names2))
  3. 次の計算結果フィールド式は Column2 という複数値フィールドに指定されるもので、Column1 を A と Z と比較し、値の先頭が英字範囲内にあるかどうかを調べます。Column1 の値が範囲外であるときは、文字列が Column2 に通知されます。
    @If(Column1 = ""; ""; @Do(
    Low1 := @Compare(Column1; "A"; [CASEINSENSITIVE]);
    High1 := @Compare(Column1; "Z"; [CASEINSENSITIVE]);
    Low2 := @Replace(@Text(Low1); "-1" : "0" : "1"; "Does not start with alpha" : "" : "");
    High2 := @Replace(@Text(High1); "-1" : "0" : "1"; "" : "" : "Does not start with alpha");
    Low2 + High2))
  4. この式は [sailboats] フィールドの文字列リストから、a、b、または c で始まる要素をすべて取り出します。
    @For(n:=1;n <= @Elements(sailboats);n := n+1;
    FIELD result := @If(n=1;@If(@Compare(sailboats[n];"d";[CASEINSENSITIVE])=-1;
    sailboats[n];"");@If(@Compare(sailboats[n];"d";[CASEINSENSITIVE])=-1;
    result:(sailboats[n]);result)));
    結果

    [sailboats] フィールドの内容が "Hunter":"C&C":"Pearson":"Contessa":"Bristol" の場合、この式は "C&C;Contessa;Bristol" を返します。

クロスリファレンス

LotusScript® 言語の StrCompare 関数