youngjr 님이 올려주신 팁입니다.
Wiki에 MyTcl 사용 라이브러리 카테고리가 있긴 한데, 빈 페이지라 이걸 어떻게 업데이트해야 좋을지 몰라 망설이고 있습니다. ^^ 현재 MyTcl이 개발 초기 단계이다 보니, 라이브러리 목록이 계속 바뀔 것도 같고요. 그래서 MyTcl의 package 라이브러리 들어있는 디렉터리에서 package 이름과 버전을 뽑아내는 스크립트를 만들어 보았습니다. 취미로 Tcl을 하는지라 코드가 허접해도 이해를 ^^ 라이브러리 상위 디렉터리에서 디렉터리 이름만 뽑아내고, 디렉터리 이름에서 숫자. 숫자. 숫자 형태로 된 버전과 이름을 regular expression을 이용하여 추출해 냅니다. 현재 패턴으로는 다 인식이 되네요. 인식이 안 되는 디렉토리명의 경우 따로 출력하게 하여 향후 패턴을 수정하든지 하도록 했습니다. 추출하다 보니, tcl8과 tcl8.5 가 동일한 이름으로 분류되어 중복 패키지의 경우 버전을 8,8.5와 같은 식으로 추가하게 하였습니다. 최종 결과는 .csv 형태로 만들어 excel 등에서 읽을 수 있게 하였습니다.
#
# Package list extractor for My Tcl
#
# Written by Young-Jun Kim
#
set version "dev-20090425"
set libpath "D:/Install/Language/Tcl/MyTCL/tcl/lib"
set outfn "MyTclPkgList.csv"
set wikifn "MyTclPkgList.wikitext.txt"
set listall [glob -nocomplain -types d -directory $libpath *]
set pkglist {}
foreach idx $listall {
set item [file tail $idx]
#set PKG_FOUND [regexp {^(.*[^0-9.-])[-]*([0-9.]+)$} $item match pre_pkgname pkgver]
set PKG_FOUND [regexp {^(.*[^0-9.-])[-]*([0-9.]+)$} $item match pkgname pkgver]
if {$PKG_FOUND == 1} {
#set pkgname [string toupper $pre_pkgname 0]
if {[lsearch -exact $pkglist $pkgname] == -1} {
lappend pkglist $pkgname
set ver($pkgname) $pkgver
} else {
puts "Warning: Package '$pkgname' is duplicated. (Previous version=$ver($pkgname), Current version=$pkgver)"
set ver($pkgname) "$ver($pkgname),$pkgver"
}
} else {
puts "Error: Invalid pakage name '$item'"
}
}
puts "Total: [llength $pkglist] package(s) founded"
#gets stdin
set ofid [open $outfn w]
foreach idx $pkglist {
puts $ofid "$idx,$ver($idx)"
}
close $ofid
set ofid [open $wikifn w]
puts $ofid "\[\[TableOfContents\]\]\n"
puts $ofid "MyTcl Version $version\n"
foreach idx $pkglist {
puts $ofid "= $idx ="
puts $ofid "'''Version:''' $ver($idx)\n\n'''Description'''\n\n'''Link'''\n\n"
}
close $ofid
'Tcl & Tk > 팁 (Tip)' 카테고리의 다른 글
백그라운드 실행 패키지 'jobexec' (0) | 2025.03.14 |
---|---|
MyTcl Syntax 파일 생성하기 (0) | 2025.03.14 |
메인 프레임 크기 설정 (0) | 2025.03.12 |
dict 패키지를 이용한 ini 파서 (0) | 2025.03.12 |
trace 커맨드를 이용한 심플 디버거 제작 (0) | 2025.03.12 |