Download presentation
Presentation is loading. Please wait.
1
Tcl/Tk 민 인학 (inhak.min@gmail.com) 한국 Tcl/Tk 커뮤니티
2
Tcl 역사 1988 년도에 존 오스터하우트 (John Ousterhout) 에 의해 개발시작 1991 년 Tcl 첫번째 릴리즈 1992 년 Tk 첫번째 릴리즈 1994~1998 년 선 (Sun) 에서 유지보수 이 시기에 맥 오에스 / 윈도우즈 지원시작 국제화지원 / 실행속도개선 / UTF-8 채용 / 고성능의 정규 표현식 지원 … 2000 년 10 월부터 오픈소스로 전환
3
Tcl/Tk 특징 high-level scripting language 모티프나 윈도우즈 코드보다 작다. interpreted 직접 실행이 가능하며, 컴파일링 / 링킹 과정이 필요없다. extensible Tcl 이나 C 로 확장가능하다. embeddable C 에서 Tcl 터프리터를 호출할 수 있다. most platforms 유닉스 / 리눅스 / 맥 / 윈도우즈 지원. Autoloading 자동 라이브러리 로딩. free 오픈소스. 로얄티없음.
4
Tcl/Tk Application Modelsim Tcl/Tk 8.4 버전 사용됨
5
Tcl/Tk Application HyperWorks World Best CAE Total Solution
6
Tcl/Tk Application iNSPIRE, iPROVE Tcl/Tk 8.4 버전 사용됨
7
Tcl/Tk Application STB Tester Tcl/Tk 8.4 버전 사용됨
8
Tcl/Tk 사용방식 tclsh 콘솔 어플 wish 윈도우 어플
9
Tcl/Tk 사용방식 C/C++ 언어의 embedded 어플 #include int main(int argc, char *argv[]) { Tcl_interp *interp = Tcl_CreateInterp(); code = Tcl_EvalFile(interp, argv[1]); if (*interp->result != 0) { printf(“%s\n”, interp->result); }
10
Tcl/Tk 사용방식 전통적인 유닉스 스크립트 #!/usr/local/bin/wish –f puts stdout "Hello, world!”
11
기본 문법 명령어 ( 커맨드 ) 의 인자를 스페이스로 구분지어 나열 command arg1 arg2 arg3 … 한 행에 여러 개의 명령어를 나열할 땐 “;” 으로 구분 command arg1 arg2 arg3... ; command arg1 arg2 arg3...
12
기본 문법 한 행이 길어진다면 백 ( 역 ) 슬래쉬 “\” 로 이어 쓴다. command arg1 \ arg2 arg3 …
13
Hello World puts stdout {Hello World} Hello World puts stderr {Hello World} Hello World puts {Hello World} Hello World puts stdout "Hello World” Hello World puts stderr "Hello World“ Hello World puts "Hello World” Hello World puts 커맨드로 출력한다. 스페이스 ( 공백 ) 문자를 포함하고 싶다면 “…” 나 {…} 사용 stdout 은 표준 메시지 출력 Standard output stderr 은 표준 에러 메시지 출력 Standard error
14
변수 set var 123 123 set var 123 set var abc abc puts stdout $var abc puts ${var}def abcdef unset var 변수에는 타입이 없다. C 언어에서의 int, char, float 같은 타입은 없다. set 커맨드로 변수에 값을 대입. set 커맨드로 값을 생략 시 변수 값 참조. 변수명의 처음에 $ 을 붙여주면 값을 참조. unset 메모리에 변수 삭제.
15
산술연산 expr 1 / 0 divide by zero expr 10 + 0x10 + 010 34 expr 2.0 * asin(1.0) 3.14159265359 set i 1 1 incr i 2 expr 커맨드 사용 16 진수,8 진수도 대입 가능 16 진수 0x10 10 진수로 16 8 진수 010 10 진수로 8 다양한 수학함수 지원 난수 (random) 지원
16
커맨드의 치환 (Substitution) set x [expr 10 * 2] 20 puts $x 20 set a 10; set b [set a] 10 […] 는 커맨드의 실행 결과로 치환
17
더블 쿼테이션 “…” 과 중괄호 {…} set var 123 123 puts "result = $var” result = 123 puts {result = $var} result = $var puts "result = \$var” result = $var set var 123 123 puts "result = [pwd]” result = C:/ puts {result = [pwd]} result = [pwd] puts "result = \[var]” result = [var] “…” 와 {…} 는 여러 개의 문자열을 하나로 묶어줌. 더블 쿼테이션 내에서는 변수와 커맨드가 치환이 됨 중괄호 내에서는 변수와 커맨드가 치환이 안됨 백 슬래쉬는 ‘[‘ 와 ‘$’ 의 치환을 무효화
18
format 서식 scan "123.456" "%d.%d" a b 2 set a 123 set b 456 format "%d.%d" $a $b 123.456 C 언어의 scanf, printf 와 동일한 서식 지원 scan 은 서식에 맞춰 문자열 분리 format 은 서식에 맞게 문자열 작성
19
procedure( 함수 ) # 보통의 인자 set foo 3 3 proc add {a b} { global foo return [expr $a + $b + $foo] } add 1 2 6 proc 커맨드로 0 개 이상의 인자를 갖는 함수를 정의 함수 내 에서 선언된 변수는 함수 내 에서만 참조가능 다른 영역의 변수를 참조하고자 한다면 global 을 사용
20
procedure( 함수 ) # 참조형 인자와 기본 인자 proc plus {a {b 1}} { upvar $a r set r [expr $r + $b] return $r } set foo 1 1 plus foo 2 plus foo 2 4 인자의 기본 값을 가질 수 있다. 인자에 변수의 값이 아닌 변수의 이름 자체를 넣고자 한다면 upvar 를 사용한다. (call by name)
21
procedure( 함수 ) # 가변 인자 proc sum {args} { set s 0 foreach i $args { set s [expr $s + $i] } return $s } sum 1 2 3 sum 1 2 3 6 가변인자는 args 를 사용한다.
22
namespace namespace eval Hello { variable var {Hello World} proc print {} { variable var puts $var } namespace eval Hello2 { variable var {Hello World} proc print {} { variable var puts $var } namespace 는 패키지 사이의 심볼 ( 함수, 변수 ) 을 충돌을 피하기 위한 기능 puts $Hello::var Hello World Hello::print Hello World
23
comment( 주석 ) # 주석 1 # 주석 2 \ 주석 2 계속 puts {Hello World} ; # 주석 3 Hello World # 시작하는 행은 주석을 의미 스크립트 기술도중에는 “; #” 를 사용
24
if, elseif, else set var 일 일 if {$var == " 일 "} { puts 1 } 1 set var 이 이 if {$var == " 일 "} { puts 1 } else { puts 2 } 2 지정된 조건 일때 수행한다. else 는 생략 가능하다. set var 삼 삼 if {$var == " 일 "} { puts 1 } elseif {$var == " 이 "} { puts 2 } else { puts 3 } 3
25
for for {set i 1} {$i <= 3} {incr i} { puts $i } 1 2 3 for {set i 1} {$i <= 5} {incr i} { if {$i < 3} { continue } puts $i } 3 4 5 지정된 횟수만큼 loop 를 수행한다. break 는 loop 를 빠져나간다. continue 는 다음 loop 을 수행한다. for {set i 1} {$i <= 5} {incr i} { if {$i > 3} { break } puts $i } 1 2 3
26
while set i 3 3 while {$i != 0} { puts stdout $i incr i -1 } 3 2 1 조건을 만족할 때까지 loop 를 수행한다. break 는 loop 를 빠져나간다. continue 는 다음 loop 을 수행한다.
27
foreach foreach i {A B C} { puts stdout $i } A B C foreach {i j} {A B C D E F} { puts stdout "$i $j” } A B C D E F 주어진 리스트만큼 loop 를 수행한다. break 는 loop 를 빠져나간다. continue 는 다음 loop 을 수행한다.
28
switch set fruit “ 사과 ” 사과 switch $fruit { 사 {puts 1000 원 } 귤 {puts 500 원 } 바나나 {puts 200 원 } default {puts 모름 } } 1000 원 만족 조건만 수행한다. default 는 맞는 조건이 없을때 수행
29
catch catch {expr 1+2} var 0 catch {expr 1*_} var 1 catch {expr 1/0} var 1 catch {error bug} var 1 에러를 catch( 감지 ) 한다. 에러발생시 1, 아닐시 0 을 리턴 % expr 1*_ invalid character "_" in expression "1*_" (parsing expression "1*_") invoked from within "expr 1*_" (file "a.tcl" line 1)
30
array 1/2 set ary( 사과 ) 1000 원 1000 원 set ary( 오렌지 ) 500 원 500 원 set ary( 바나나 ) 2000 원 2000 원 parray ary ary( 사과 ) = 1000 원 ary( 오렌지 ) = 500 원 ary( 바나나 ) = 2000 원 puts $ary( 사과 ) 1000 원 요소들의 모음 근복적으로 1 차원 array 만 가능하나 키가 문자열인 것을 이용하여 2 차원 이상도 표현 가능 parray 는 array 의 요소를 출력 키 = 값 set ary(0,0) 0 set ary(0,1) 1 set ary(0,2) 2 set ary(1,0) 0 set ary(1,1) 1 set ary(1,2) 2
31
array 2/2 array names ary 바나나 오렌지 사과 array size ary 3 array exists ary 1 array set ary { 사과 1000 원 오렌지 500 원 바나나 2000 원 } array get ary 바나나 2000 원 오렌지 500 원 사과 1000 원 array unset ary ary 삭제됨 unset ary( 오렌지 ) 오렌지 요소 삭제됨 이 외에도 다양한 커맨드가 있으니 Tcl 공식 문서를 참고할 것
32
string 1/2 set str abc if {[string equal $str "abc"]} { puts 같음 } 같음 set str abc if {[string match "ab*" $str]} { puts 같음 } 같음 문자열 조작 커맨드 문자열 비교시 string 커맨드를 사용하는 것이 안전하다.
33
string 2/2 string length ”abc” 3 string range “abcdef” 0 2 abc string tolower “ABC” abc string toupper “abc” ABC string index “abc” 1 b 이 외에도 다양한 커맨드가 있으니 Tcl 공식 문서를 참고할것
34
append set str1 abc append str1 def ghi set str1 abcdefghi append str2 123 456 set str2 123456 문자열 추가 커맨드
35
list set var ” 사과 오렌지 바나나 ” 사과 오렌지 바나나 set var { 사과 오렌지 바나나 } 사과 오렌지 바나나 set var [list 사과 오렌지 바나나 ] 사과 오렌지 바나나 set var [concat " 사과 오렌지 바나나 “] 사과 오렌지 바나나 set var [concat { 사과 오렌지 바나나 }] 사과 오렌지 바나나 set var { 사과 오렌지 바나나 } 사과 오렌지 바나나 lappend var 멜론 딸기 사과 오렌지 바나나 멜론 딸기 쌍 따옴표나 중괄호를 사용하여 공백으로 구분된 문자열의 집합 인자의 문자열로부터 리스트 생성 인자의 문자열로부터 공백을 기준으로 리스트 생성 리스트에 요소 추가 지정 변수 없을시 새로운 리스트 생성
36
list set var ” 사과 오렌지 바나나 ” llength $var 3 lindex $var 1 오렌지 lrange $var 0 1 사과 오렌지 linsert $var 1 메론 딸기 사과 메론 딸기 오렌지 바나나 lset $var 0 키위 키위 오렌지 바나나 리스트의 요소 개수 리턴 지정된 인덱스의 요소 리턴 지정된 영역의 요소를 리턴 지정된 위치에 요소를 삽입 지정된 위치에 요소를 변경
37
list set var ” 사과 오렌지 바나나 ” lsearch $var 오렌지 1 lsort " 사과 오렌지 바나나 " 바나나 사과 오렌지 set var { 사과 : 오렌지 : 바나나 : 사과 } 사과 : 오렌지 : 바나나 : 사과 split $var : 사과 귤 바나나 사과 리스트의 요소를 검색 리스트의 요소를 정렬 이 외에도 다양한 커맨드가 있으니 Tcl 공식 문서를 참고할것 문자열을 분리하여 리스트로 리턴
38
file i/o access set fd [open “sample.txt” w] puts $fd “hello world 1” puts $fd “hello world 2” close $fd set fd [open “sample.txt” r] set txt [read $fd] puts $txt close $fd 파일 생성 파일 읽음 이 외에도 파일 i/o 관련하여 다양한 커맨드를 제공하고 있으니 직접 찾아볼것.
39
file proc filechk {file1 file2} { set time1 [file mtime $file1] set time2 [file mtime $file2] if {$time1 > $time2} { return "$file1 이 최근것입니다.” } elseif {$time1 < $time2} { return "$file2 이 최근것입니다.” } else { return ” 같습니다.” } filechk a.txt b.txt file 커맨드는 file 에 관련된 다양한 기능을 제공하며 파일의 상태를 체크하는 기능도 제공한다. mtime 은 modify time. 이 외에도 file 에 관련된 다양한 커맨드가 있으니 Tcl 공식 문서를 참고할것
40
package package require tcl3d package require vtk package require Bwidget package 는 Tcl 의 기본 기능에서 플러그인 형식으로 확장하는 개념으로 보통 확장패키지라 부름 순수 Tcl 이나, C/C++ 로 확장 패키지를 작성함. package require 는 확장 패키지를 인터프리터로 적재시키는 커맨드 확장 패키지들은 tcltk.co.kr 에서 다운 받을 수 있음.
41
Tcl commands 지금까지 알아본 것 외에도 다양한 커맨드를 제공하고 있으니 반드시 확인해 볼것
42
Tcl/Tk 개발환경 ActiveTcl (www.activestate.com/activetcl ) ActiveState 사에서 제공되는 Tcl/Tk 인터프리터 Tclsh,Wish 만 제공됨 다양한 플랫폼에서 컴파일된 Tcl/Tk 인터프리터 제공 Windows, Linux, Mac OS X, Solaris, AIX and HP-UX 무료
43
Tcl/Tk 개발환경 MyTcl (http://mytcl.tcltk.co.kr) 개인적으로 시작한 Tcl/Tk 통합 개발환경 인터프리터 / 에디터 / 코드 부라우저 / 디버거 / 빌더 제공 유용하고 다양한 확장 패키지 제공 현재 윈도우 설치 파일만 제공 / 차후 리눅스 버전 계획 있음. 무료
44
감사합니다
Similar presentations