StringGetPos

문자열 안에서 지정된 부문자열의 위치를 열람합니다.

StringGetPos, OutputVar, InputVar, SearchText [, L#|R#, Offset]
Position := InStr(Haystack, Needle [, CaseSensitive?, StartingPos]) ; 자세한 것은 InStr() 함수 참조.
선택

매개변수

OutputVar

열람된 위치를 저장할 변수의 이름. InputVar의 첫 문자에 상대적입니다. 위치가 0이면 StringGetPos에 대하여 첫 문자이고 위치가 1이면 InStr()에 대하여 첫 문자입니다.

InputVar

내용이 검색될 입력 변수의 이름. 이름을 퍼센트 사인으로 둘러 싸지 마십시오. 단, 변수의 내용이 이름이기를 바라는 경우라면 예외입니다.

SearchText

검색할 문자열, 부합은 대소문자를 구분하지 않습니다. 단, StringCaseSense가 켜져 있는 경우는 예외입니다.

L#|R#

이 매개변수는 InputVar 안에서 SearchText가 여러 번 출현하면 몇 번째 부합을 발견할지에 영향을 미칩니다 . 이 매개변수를 생략하면, 첫 번째 부합을 위해 InputVar를 왼쪽부터 검색합니다. 이 매개변수가 1이거나 기호 R이면, 검색이 InputVar의 오른쪽부터 시작해 왼쪽으로 첫 번째 부합을 발견할 때까지 계속됩니다.

첫 번째 부합말고 다른 부합을 발견하려면, 기호 L 또는 R 다음에 출현 횟수를 지정하십시오. 예를 들어, 오른쪽에서 네 번째 출현을 발견하고 싶으면. r4를 지정하십시오. 주의: 숫자를 0이하로 지정하면, 부합이 발견되지 않습니다.

Offset

왼쪽 끝 또는 오른쪽 끝으로부터 (위의 매개변수에 따라) 건너 뛸 문자의 개수. 생략하면, 기본값은 0입니다. 예를 들어, 다음은 왼쪽 10번째 문자부터 검색을 시작합니다: StringGetPos, OutputVar, InputVar, abc, , 9. 이 매개변수는 표현식일 수 있습니다..

ErrorLevel

ErrorLevel은 지정된 SearchText의 출현을 InputVar 안에서 발견할 수 없었으면 1이 설정되고 그렇지 않으면 0이 설정됩니다.

논평

StringMid 그리고 InStr()와 다르게, StringGetPos에 대하여 0은 첫 번째 문자의 위치로 정의됩니다.

열람된 위치는 언제나 InputVar의 첫 문자에 상대적입니다. L#|R# 그리고/또는 Offset이 지정되어 있든 말든 상관이 없습니다. 예를 들어, 문자열 "abc"가 123abc789에서 발견되면, 보고된 그의 위치는 언제나 3입니다. 어떤 방법으로 발견했는지는 상관이 없습니다.

SearchText의 지정된 출현이 InputVar안에 존재하지 않으면, OutputVar는 -1이 설정되고 ErrorLevel는 1이 설정됩니다.

SplitPath를 사용하면 보다 쉽게 파일 경로를 그의 디렉토리와 파일이름 그리고 확장자로 가를 수 있습니다.

내장 변수 %A_Space%%A_Tab%에 각각 스페이스 문자 하나와 탭 문자 하나가 들어 있습니다. SearchText의 앞이나 뒤에서 스페이스와 탭을 따로 검색할 경우에 유용합니다.

관련 항목

InStr(), RegExMatch(), IfInString, if var in/contains MatchList, StringCaseSense, StringReplace, SplitPath, StringLeft, StringRight, StringMid, StringTrimLeft, StringTrimRight, StringLen, StringLower, StringUpper, if var is type

예제

Haystack = abcdefghijklmnopqrs
Needle = def
StringGetPos, pos, Haystack, %Needle%
if pos >= 0
    MsgBox, 문자열이 위치 %pos%에서 발견되었습니다.
선택 | 내려받기

 

; 예제 #2:
; 파일이 전체 경로를 각 구성요소로 분해 합니다.
; StringSplit 또는 파싱 회돌이를 사용하면 
;  훨씬 더 쉽게 가를 수 있습니다. 그래서 아래는 그저 보여주기 용입니다.
FileSelectFile, file, , , 깊숙히 내포된 폴더 안에서 파일이름 하나를 고르십시오:
if file <>
{
    StringLen, pos_prev, file
    pos_prev += 1 ; 마지막 문자 뒤에 위치에 맞게 조절합니다.
    Loop
    {
        ; 오른쪽으로부터 N번째 출현을 검색합니다:
        StringGetPos, pos, file, \, R%A_Index%
        if ErrorLevel
            break
        length := pos_prev - pos - 1
        pos_prev := pos
        pos += 2  ; StringMid에 사용하기 위해 조정합니다.
        StringMid, path_component, file, %pos%, %length%
        MsgBox Path component #%a_index% (from the right) is:`n%path_component%
    }
}
선택 | 내려받기