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)
)
(initget)함수로 키워드를 설정합니다.(getkword)로 사용자로부터 키워드를 받아서kword변수에 저장합니다. 이 때 키워드는(initget)에서 설정한 키워드 중 하나일 수도 있고,nil일 수도 있습니다.(선택하지 않고 엔터를 누른 경우)- 사용자가 선택한 키워드를 한글로 변경하여 다시
kword변수에 저장합니다.- 사용자가 키워드를 선택했으면 (
kword가nil이 아니면) 선택한 과일을 보여주고, 사용자가 선택하지 않고 엔터를 눌렀으면(kword가nil이면) 과일을 선택하지 않았음을 알려 보여줍니다.
-1.gif)