StringGetPos

提供: AutoHotkey Wiki
移動: 案内検索

実行制御 | GUI表示 | 演算・変数 | メモリ・DLL操作 | 文字列操作 | キーボード | マウス | シェル | ウィンドウ | ウィンドウグループ
ステータスバー | コントロール | サウンド | ファイル | INIファイル | レジストリ | 環境変数 | AutoHotkey | その他 | 設定関係 | オブジェクト

StringGetPos[編集]

文字列中の特定の文字列の位置を検索する。

StringGetPos, OutputVar, InputVar, SearchText [, L#|R# , Offset] 

Parameters[編集]

引数名 説明
OutputVar 検索された位置を格納する変数名。
文字列の最初は 0として数える。
見つからなかった場合は、 -1になる。
InputVar 文字を検索する対象の文字列が格納された変数名。
SearchText 検索する文字列。
StringCaseSenseで設定しない限り、大文字小文字の違いは無視される。
L#|R# SearchTextにマッチする部分が複数ある場合、何番目の出現位置を取得するかを指定できる。
省略時は、一番最初の出現位置を取得する。
1Rを指定すると、一番最後の出現位置を取得できる。
L2のように Lに続いて数字を指定すると、最初から指定番目の出現位置を取得できる。
R3のように Rに続いて数字を指定すると、最後から指定番目の出現位置を取得できる。
SearhTextの出現数がLやRに続いて指定した数より少なかった場合、見つからなかったみなされ、OutputVarは -1になる。
Offset 検索時、最初のOffset文字分だけ無視して検索を始める。
省略時は 0
L#|R#で最後から検索する指定になっている場合、最後のOffset文字分を飛ばして検索を始める。

ErrorLevel[編集]

SearchTextが見つからなかった場合は 1、見つかった場合は 0

Remarks[編集]

結果はバイト単位となり2バイト文字の途中であるかどうかは考慮されない(日本語を扱う上での不具合を参照。)
AHKL ユニコード版では全角/半角に関わらず文字単位である。

StringMidと違い、文字列の最初は 0文字目として処理される。

L#|R#やOffsetオプションでの指定にかかわらず、必ずInputVarの先頭からの位置が取得される。

ファイルのパスを分解したい場合、SplitPathを使ったほうが便利。

SearchTextやReplaceTextに半角スペースやTab文字を指定したい場合、組み込み変数%A_Space%%A_Tab%を使用する。

Related[編集]

IfInString, StringCaseSense, SplitPath, StringLeft, StringRight, StringMid, StringTrimLeft, StringTrimRight, StringLen, StringLower, StringUpper, StringReplace, if var is type

Example(s)[編集]

Haystack = abcdefghijklmnopqrs
Needle = def
StringGetPos, pos, Haystack, %Needle%
If pos >= 0
  MsgBox, The string was found at position %pos%.
; Example #2:
; Divides up the full path name of a file into components.
; Note that it would be much easier to use StringSplit or a
; parsing loop to do this, so the below is just for illustration.
FileSelectFile, file, , , Pick a filename in a deeply nested folder:
If file <>
{
  StringLen, pos_prev, file
  pos_prev += 1	; Adjust to be the position after the last char.
  Loop
  {
    ; Search from the right for the Nth occurrence:
    StringGetPos, pos, file, \, R%A_Index%
    If ErrorLevel <> 0
      Break
    length := pos_prev - pos - 1
    pos_prev := pos
    pos += 2	; Adjust for use with StringMid.
    StringMid, path_component, file, %pos%, %length%
    MsgBox Path component #%A_Index% (from the right) is:`n%path_component%
  }
}