Presentation is loading. Please wait.

Presentation is loading. Please wait.

Tcl/Tk 민 인학 한국 Tcl/Tk 커뮤니티.

Similar presentations


Presentation on theme: "Tcl/Tk 민 인학 한국 Tcl/Tk 커뮤니티."— Presentation transcript:

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 감사합니다


Download ppt "Tcl/Tk 민 인학 한국 Tcl/Tk 커뮤니티."

Similar presentations


Ads by Google