2010年3月29日月曜日

VBA 選択したセルに1から順に番号を入れる

Sub 選択したセルに1から順に番号を入れる()
    Count = 1
    For Each buf In Selection.Cells
        buf.Value = Count
        Count = Count + 1
    Next
End Sub

tcl 文字列を指定した長さでリストで返す

proc splitRange args {
    set userString [lindex $args 0]
    set range      [lindex $args 1]
    set bufferList {}
   
    if {[llength $args] != 2} {
        puts "wrong # args: should be \"splitRange string range\""; return
    }
    if {$range <= 0} {
        puts "wrong # arg : range should be over 0"
        return}
   
    for {set idx 0} {$idx < [string length $userString]} {set idx [expr $idx + $range]} {
        set lastIdx [expr $idx + $range -1]
        lappend bufferList [string range $userString $idx $lastIdx]
    }
    return $bufferList
}

2010年3月21日日曜日

TclでTeratermを使うためのパッケージ ver0.1

フォルダ名「teraterm」をlibに置き、そのフォルダにいか2つのをおく。

pkgIndex.tcl
package ifneeded teraterm 0.1 [list source [file join $dir teraterm.tcl]]

teraterm.tcl
package require Tcl
package require Tk
package provide teraterm 0.1

namespace eval ::teraterm {
    variable ttmacro "C:/Program Files/teraterm/ttpmacro.exe"

    namespace export ttstart selectMacro
   
}

proc teraterm::ttstart {macro args} {
    variable ttmacro
   
    set cmd ""
    #exec以下の要素を \" で囲むと解釈できる
    #
    append cmd "\"" $ttmacro "\"" " "
    append cmd "\"" $macro "\"" " "
   
    foreach i $args {
        append cmd "\"" $i "\"" " "
        }
    set param [string range $cmd 0 end-1]

    return [catch {eval exec $cmd}]
   
}

proc teraterm::selectMacro {} {
    set fileTypeList {
        {{Teraterm macro} {.ttl}}
    }
   
    set filePath [tk_getOpenFile -filetypes $fileTypeList]
    if {$filePath eq ""} {set filePath ""}
   
    return $filePath
}

2010年3月20日土曜日

eclipse で tcl

preadesからJREなしのeclipse3.4(プラットフォームだけ)をダウンロード。
EMF(Coreのみ)をダウンロード
DLTKのコアとTclをダウンロード

eclipseをいれたら、
dropinsフォルダに下にeclipseという名前のフォルダを作って、
EMFのfeaturesとpluginsを格納する。
同じeclipseフォルダにDLTKコアとTclのfeaturesとpluginsを入れておく。
eclipse を cleanオプション指定して起動する。

Tclを実行するにはインタプリタが必要。
ActiveStateからActiveTclをダウンロードしてインストールしておく。
また、デバッグ用ツールもActiveStateにあるのでこれもダウンロードしてインストールしておく。
(デバッグ用ツールのダウンロードページはeclipseでTclデバッグ設定する箇所にリンクがあるのでそこから行ける)

以上のことがうまく行けば、eclipseでTclが使えます。
ブレークポイント指定すれば止めることができるし、変数の中身も見える。
(デバッグパースペクティブ)

ややこしいのはEMFやDLTKをeclipseに追加するところ。
解凍したものをただ既存のfeatures,pluginsフォルダにコピーしても
うまく認識できなかった。(わたしがやった場合で)
今回はアーカイブされてたものを展開してeclipse以下にコピーするやり方をしました。
ソフトウェア更新でオンラインでやらなかったのは、プロキシによって通らないケースを前提にしていたからです。

TkもSWTみたいにできるようになったらいいな。