포스트(post)

19. 키워드 입력받기 - (getkword)

목표

사용자로부터 지정된 키워드를 받을 수 있는 (getkword)함수를 사용 해 봅시다



키워드

사용자로부터 문자열을 입력받을 때는(getstring)함수를 사용할 수 있습니다. 하지만 옵션을 선택할 때 처럼 특정 키워드만을 입력받고 싶다면, (getkword)함수를 사용하면 됩니다.

(getkword)함수는 다음과 같은 형식으로 사용합니다.

1
(initget "키워드1 키워드2 ... 키워드n")(getkword "메시지")

예를들면 이렇게 사용됩니다. 한번 명령어창에 복붙해서 사용 해 보세요

1
(initget "Apple Banana Cherry")(getkword "\n과일 선택 - Apple(a), Banana(b), Cherry(c) : ")

a, b, c 중 1개를 입력하면 (getkword)함수가 Apple, Banana 또는 Cherry 값을 반환하는 것을 확인 할 수 있습니다. 만약 사용자가 키워드에 등록되어 있지 않은 다른 값을 입력하면 다시 입력을 요구할겁니다.

이렇게 하면 원하는 키워드만 입력받도록 만들 수 있습니다.

(initget)

여기서 (initget)함수는 (getkword)함수를 사용하기 전에, 입력 받을 수 있는 키워드를 지정해 주는 역할을 합니다.(사실 (initget)함수는 사용자 입력을 받는 대부분의 (get)시리즈 함수에 사용하여 여러가지 기능을 추가할 수 있지만, 다음에 자세히 알아보겠습니다.)

(initget)함수에 키워드를 등록할 때, 한 문자열 안에 키워드를 공백(띄어쓰기)로 구분하여 입력하면 됩니다.

1
(initget "apple banana cherry")

하지만 키워드를 이렇게 작성하면, 사용자는 a,b,c가 아니라 apple, banana, cherry전체를 입력해야 합니다. 만약 키워드의 일부만 입력하여 그 키워드를 선택하게 하고 싶다면, 해당 부분을 대문자로 작성하면 됩니다.

1
(initget "Apple Banana Cherry")

이렇게하면, 사용자가 대문자로 작성한 부분만 입력하더라도 원하는 키워드를 선택 할 수 있게됩니다.

(initget)함수의 효력은 언제까지?

(initget)함수는 사용자 입력을 받는 (get)시리즈 함수에 적용되는 옵션을 설정하는 함수입니다. 따라서 (initget)함수로 설정한 옵션은, 이후 처음 만나는 (get)시리즈 함수에 적용된 후에는 사라집니다.



실습

(getkword)함수로 사용자로가 키워드를 선택하게 한 후, 그 키워드를 한글로 변경하여 명령어 창에 띄어보겠습니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
(progn
	(initget "Apple Banana Cherry") ;1
	(setq kword ;2
		(getkword "\n과일 선택 - 사과(a), 바나나(b), 체리(c) : ")
	)
	(if (= kword "Apple") ;3
		(setq kword "사과")
	)
	(if (= kword "Banana") ;3
		(setq kword "바나나")
	)
	(if (= kword "Cherry") ;3
		(setq kword "체리")
	)
	(if kword ;4
		(princ (strcat "\n선택하신 과일은 " kword "입니다"))
		(princ "\n과일을 선택하지 않았습니다")
	)
	(princ)
)
  1. (initget)함수로 키워드를 설정합니다.
  2. (getkword)로 사용자로부터 키워드를 받아서 kword변수에 저장합니다. 이 때 키워드는 (initget)에서 설정한 키워드 중 하나일 수도 있고, nil일 수도 있습니다.(선택하지 않고 엔터를 누른 경우)
  3. 사용자가 선택한 키워드를 한글로 변경하여 다시 kword변수에 저장합니다.
  4. 사용자가 키워드를 선택했으면 (kwordnil이 아니면) 선택한 과일을 보여주고, 사용자가 선택하지 않고 엔터를 눌렀으면(kwordnil이면) 과일을 선택하지 않았음을 알려 보여줍니다.

© IsaacGo. All rights reserved.