비주얼노벨 강좌

3.2 문자열


루아에서의 문자열내에서 글자에 대한 인덱싱은 1부터 시작한다. (C언어와 같이 0 이 아니다. 헷갈리지 말 것.)
음수 인덱싱도 허용하지만, 이때는 문자열의 맨 끝부터 역으로 인덱싱을 하게 된다. (ex. -1 은 문자열의 맨 마지막 문자를 나태냄.)
두개의 문자열의 병합은 ".." 연산자를 사용한다.


아래는 두개의 문자열을 합쳐 출력하는 예다.


 a = "necrosen"
 b = "멍청이"
 c = a..b 
-- a값과 b값을 병합
 print(c) -- "necrosen멍청이" 가 출력된다.


3.2.1
문자열 제어 함수들


이 라이브러리는 문자열 관리를 위한 검색, 부분 문자열의 추출, 패턴 대입등 등을 지원하는 일반 함수들을 제공한다.
문자열 라이브러리의 모든 함수는 테이블 string(스트링) 내에 모두 담겨있다.


#1.
string.byte (s, [, i])


문자열 s의 i번째 문자의 내부 숫자로 표현된 코드(ex. 아스키 코드)를 반환
한다.
만일 i를 지정하지 않으면 1로 간주처리가 된다. i는 물론 음수로 지정될 수 있다.


#2.
string.char (i1, i2, ...)


0 이상의 정수만을 인자로 받는다. 각각의 숫자가 나타내는 코드에 해당되는 문자를 반환한다.


#3.
string.find (s, pattern [, init [, plain]])


문자열 s내에서 pattern에 가장 첫번째로 맞는 부분을 찾아 반환
한다.
만약 한개를 찾았다면 find()함수는 일치점의 시작과 끝을 나타내는 s의 인덱스들를 반환한다. 찾지 못하면 nil을 반환한다.


만약 pattern 문자열내에 "캡쳐" 옵션이 지정되어 있다면(string.gsub 참조), 캡쳐된 문자열들도 반환값에 포함되어 반환된다.


init 인자는 어디서부터 검색을 시작할 것인지에 대한 s 문자열내의 인덱스를 지정한다. 지정하지 않으면 1로 간주되며, 음수지정도 가능하다.


plain 인자의 값을 true로 놓으면 패턴 매칭 기능을 끄는 효과가 있다.
이것은 아주 평범한(plain) 부분 문자열을 검색하는 명령이 되며, pattern 인자내에 들어있는 값들은 무시된다.
만일 plain 인자를 true로 지정하면 init도 반드시 지정해야 한다는 점에 주의해라. plain은 지정하지 않으면 당연히 false로 간주된다.


#4.
sting.len (s)


문자열의 길이를 반환한다.
""(빈 문자열)은 0을 반환한다. 첨부된 0값갯수포함된다.
그러므로 예를 들면 "a00b00c"의 길이는 5가 된다.


#5.
string.lower(s)


주어진 문자열을 모두 소문자로 바꾸고 그 결과 문자열의 복사본을 반환한다. (원본은 바뀌지 않는다.)
대소문자에 대한 구분은 현재 로케일 설정을 따른다.


#6.
string.rep (s, n)


문자열 s를 n번 반복하여 모두 병합한 값을 반환
한다.


#7.
string.sub (s, i [, j])


문자열 s내에서 i에서 시작하고 j에서 끝나는 부분에 대한 부분 문자열을 반환
한다.
i와 j는 음수 지정이 가능하다. j를 지정하지 않으면, -1로 간주된다. (즉, i에서 끝까지의 영역을 나타내게 된다.)


여러가지 지정을 예를 들면, 만일 문자열 s의 길이 j 만큼의 접두어를 때어내려면, string.sub(s, 1, j)라고 지정하면 되며,
string.sub(s, -i)는 문자열 s에서 i길이 만큼의 접미어를 때내는 효과가 있다.


#8.
string.upper(s)


문자열 내의 모든 소문자들을 대문자로 바꾼 결과를 반환한다. 대소문자에 대한 구분은 현재 로케일 설정을 따른다.


#9.
string.format(formatstring, e1, e2, ...)


첫번째 인자(반드시 문자열이어야 함)로 주어지는 정의를 따라서 다양한 수의 인자들을 잘 포맷한 결과물을 반환한다.
C 언어에서 printf() 함수를 생각하면 된다. 내부 포맷룰도 같지만, 다음과 같은 차이가 있다.


- *, l, L, n, p, h는 지원되지 않는다.
- q 옵션이 제공된다.


  string.format('%q', 'a string with "quotes" and n new line')


다음과 같이 나올 것이다.


 "a string with "quotes" and
 newline"


- c, d, E, e, f, g, G, i, o, u, X, x와 같은 모든 옵션은 숫자를 적용하여 사용하며, q와 s만 문자열을 적용하여 사용된다.


#10.
string.gfind (s, pat)


#11.
string.gsub (s, pat, repl [, n])


[출처] 아방스 ( http://avangs.info/zbxe/S_gameXP/ ) by Mania(Necrosen).

Comment '6'
  • ?
    샘물 2009.01.10 11:20
    어렵네요 여기만 .
  • ?
    나뚜루 2009.01.10 12:01
    문자열 하나하나에 함수를 대입할 수는 없을까요.. 루비에선 가능한데..
  • ?
    [Dark].Angel 2009.01.10 21:54
    흠... 역시 c언어랑 밀접한 관련이 있네요 ㅎㅎ...
  • ?
    Mania 2009.01.11 08:43
    C/C++ 과 관련된 스크립트가 루아입니다.
  • ?
    [Dark].Angel 2009.01.12 16:20
    ㅎㅎ.... 루아 거의 마스터를 해버려야 겠군요 ㅎㅎ.. 재미있을 듯
  • ?
    후르츠파르페 2009.01.21 02:08
    변수에 문자가 지정되었던가..
    만진지 오래되서 기억이 가물가물..