4D v19

Position

ホーム

 
4D v19
Position

Position 


 

Position ( find ; aString {; start {; lengthFound}}{; *} ) -> 戻り値 
引数   説明
find  文字 in 見つける文字列
aString  文字 in 調べる文字列
start  倍長整数 in aString引数内で検索を開始する位置
lengthFound  倍長整数 in 見つかった文字列の長さ
演算子 in 渡されると、文字コードに基づいて評価
戻り値  倍長整数 in 最初に見つかった位置
Position ( find ; aString ; start ; lengthFound ; options ) -> 戻り値 
引数   説明
find  文字 in 見つける文字列
aString  文字 in 調べる文字列
start  倍長整数 in aString引数内で検索を開始する位置
lengthFound  倍長整数 in 見つかった文字列の長さ
options  倍長整数 in 検索条件
戻り値  倍長整数 in 最初に見つかった位置

説明   

Position コマンドは、aString の中でfind が最初に現われる位置を返します。

aString の中にfind が見つからない場合は、Positionはゼロ(0) を返します。

find が見つかると、aString の中に検索文字列が最初に表示された文字位置を返します。

空のstringに対して空のfindを指定すると、Position はゼロ(0) を返します。

デフォルトで、検索をaString の最初の文字で開始します。start 引数を使用して、aString 中で検索を開始する文字位置を指定します。

lengthFound 引数は、検索によって実際に見つかった文字列の長さを返します。この引数は、1つ以上の文字(例えばæとae、ßとss等) で書きこまれる文字を正確に表現するために必要となります。
*
引数が渡されたとき (以下参照) 、これらの文字は等しいと認識されない (æ # ae) ことに注意してください。このモードで、lengthFound はいつもfind の長さと同じです (オカレンスが発見された場合)。

デフォルトでこのコマンドはグローバルな比較を行い、言語上の特性と、1つ以上の文字で記述される文字 (例 æ = ae) を考慮に入れます。他方、発音は区分せず (a=A, a=à 等) 、無視可能な文字は考慮されません (Unicodeの仕様)。無視可能な文字にはUnicodeのC0 Control サブセット (U+0000 ~ U+001F, Ascii制御文字セット) のすべての文字が含まれます (ただし印刷可能な文字 (U+0009 TAB, U+0010 LF, U+0011 VT, U+0012 FF そして U+0013 CR) は除きます。
この動作を変更するには、シンタックスに応じて以下のものを渡してください: 

  • (第1シンタックス - * 引数) 最後の引数としてアスタリスク * を渡します。この場合、比較は文字コードベースで行われます。* 引数は以下のようなケースで必要となります:
    • 区切り文字として使用されている文字(Char(1))などの特別な文字を考慮に入れたい場合、
    • 文字の評価で大文字小文字の区別やアクセント文字を考慮したい場合 (a#A, a#à 等)。
      このモードでは、単語が書かれた方法のバリエーションが評価されないことに留意してください。

      注: 特定の場合において、 * 引数を使用することでコマンドの実行速度が格段に速くなる場合があります。

  • (第2シンタックス - options 引数) Strings テーマ内の以下の定数の一つまたは複数:

    定数 コメント
    sk case insensitive 2

    文字列は、カレントのデータ言語設定に応じて比較され、大文字/小文字の差異は考慮されません。ただしアクセント記号は考慮されるという点に注意してください。例えば、"A" と"a" は同じとみなされますが、"a" は"à" とは違うとみなされます。

    これは以下の定数と組み合わせ可能です: 

    • sk char codes
    • sk diacritic insensitive
    • sk kana insensitive
    • sk strict
    • sk whole word (Position コマンドのみ)
    sk char codes 1

    文字列は文字コードに基づいて比較されます。カレントのデータ言語設定は比較の際には考慮されません。

     

    これは以下の定数と組み合わせ可能です: sk case insensitive 

    これは"a-z" または "A-Z" のレンジのみ使用可能です(例: Alpha = alpha、しかし Alpha # âlphà)

    sk diacritic insensitive 4

    文字列は、カレントのデータ言語設定に応じて比較されますが、文字のアクセント記号(アクセントやウムラウトなど)は無視されます。例えば、"a" は"à" と同じとみなされます。

     

    これは以下の定数と組み合わせ可能です:

    • sk case insensitive
    • sk kana insensitive
    • sk strict
    • sk width insensitive
    • sk whole word (Position コマンドのみ)
    sk kana insensitive 8

    日本語のみ。文字列は、カレントのデータ言語設定内での読みに基づいて比較されます(ただしひらがな/カタカナなどの表記は考慮されません)。例えば、"あ"は"ア"と同じとみなされます。

    このオプションが設定されている場合、sk width insensitive も暗示的に設定されます(セットとみなされます)が、逆はセットになりません。

     

    これは以下の定数と組み合わせ可能です:

    • sk case insensitive
    • sk diacritic insensitive
    • sk strict
    • sk width insensitive
    sk strict 0

    文字列は、カレントのデータ言語設定の基づいて完全一致するかどうかに応じて比較されます。多くの場合、大文字/小文字、アクセント記号の有無は比較の際に考慮されます(違う文字とみなされます)。

     

    これは以下の定数と組み合わせ可能です:

    • sk case insensitive
    • sk diacritic insensitive
    • sk kana insensitive
    • sk width insensitive
    sk whole word 32

    文字列は、カレントのデータ言語設定に基づいて比較されます。完成された単語全体が文字列として考慮されます。例えば、"where" は"somewhere" 内に含まれているのが見つかった場合は同じとはみなされません。

     

    これは以下の定数と組み合わせ可能です: 

    • sk case insensitive (Position コマンドのみ)
    • sk diacritic insensitive (Position コマンドのみ)
    sk width insensitive 16

    日本語のみ。文字列は、カレントのデータ言語設定内で異なる文字幅でも同じとみなされます。例えば、"ア"は"ア"と同じであるとみなされます。

     

    これは以下の定数と組み合わせ可能です:

    • sk case insensitive
    • sk diacritic insensitive
    • sk kana insensitive
    • sk strict


データ言語の定義に関する情報については、デザインリファレンステキスト比較 の章を参照してください。

 

警告: Position に対して@ワイルドカード記号を使用することはできません。例えば、findに"abc@" を渡すと、このコマンドは"abc" で始まる文字ではなく、単なる文字として"abc@" を検索します。

Position関数の使用例を次に示します。結果を変数vlResultに代入します。コメントは、変数vlResultに代入される値についての説明です。

 vlResult:=Position("ll";"Willow") ` vlResult gets 3
 vlResult:=Position(vtText1;vtText2) ` Returns first occurrence of vtText1 in vtText2
 vlResult:=Position("day";"Today is the first day";1) ` vlResult gets 3
 vlResult:=Position("day";"Today is the first day";4) ` vlResult gets 20
 vlResult:=Position("DAY";"Today is the first day";1;*) ` vlResult gets 0
 vlResult:=Position("œ";"Bœuf";1;$length` vlResult =2, $length = 1

次の例ではlengthFound引数を使用して、テキスト中に現れるすべての"aegis" を検索します。

 $start:=1
 Repeat
    vlResult:=Position("aegis";$text;$start;$lengthfound)
    $start:=$start+$lengthfound
 Until(vlResult=0)

以下の例題では、ある文字列を全て見つけて、それを置き換える場合を考えます:

 var $lengthFound : Integer
 
 $string:="Hello Joelle et joel!"
 $find:="joel"
 $replace:="Joël"
 $option:=sk case insensitive+sk diacritic insensitive
 
 $p:=0
 Repeat
    $p:=Position($find;$string;$p+1;$lengthFound;$option)
    If($p>0)
       $string:=Substring($string;1;$p-1)+$replace+Substring($string;$p+$lengthFound)
    End if
 Until($p<=0) // 戻り値: $string -> Hello Joëlle and Joël!



参照 

Compare strings
Substring

 
プロパティ 

プロダクト: 4D
テーマ: 文字列
番号: 15

This command can be run in preemptive processes

 
履歴 

変更: 4D v11 SQL
変更: 4D v18 R6

 
ARTICLE USAGE

ランゲージリファレンス ( 4D v19)
ランゲージリファレンス ( 4D v19.1)