hex2binで16進数を4桁の2進数へ変換する
proc ANDMask args {
set data [hex2bin [lindex $args 0]]
set mask [hex2bin [lindex $args 1]]
set maskLength [string length $mask]
set dataList [splitRange $data $maskLength]
set result ""
foreach buffer $dataList {
for {set index 0} {$index < $maskLength} {incr index} {
set dataBit [string range $buffer $index $index]
set maskBit [string range $mask $index $index]
#マスク対象のデータがなくなったら終了
if {[string length $dataBit] != 0} {
append result [expr $dataBit && $maskBit]
} else {break}
#puts "DEBUG dataBit:$dataBit maskBit:$maskBit result:[string range $result end end]"
}
}
return [bin2hex $result]
}
proc ORMask args {
set data [hex2bin [lindex $args 0]]
set mask [hex2bin [lindex $args 1]]
set maskLength [string length $mask]
set dataList [splitRange $data $maskLength]
set result ""
foreach buffer $dataList {
for {set index 0} {$index < $maskLength} {incr index} {
set dataBit [string range $buffer $index $index]
set maskBit [string range $mask $index $index]
#マスク対象のデータがなくなったら終了
if {[string length $dataBit] != 0} {
append result [expr $dataBit || $maskBit]
} else {break}
#puts "DEBUG dataBit:$dataBit maskBit:$maskBit result:[string range $result end end]"
}
}
return [bin2hex $result]
}
2010年4月2日金曜日
2010年3月29日月曜日
VBA 選択したセルに1から順に番号を入れる
Sub 選択したセルに1から順に番号を入れる()
Count = 1
For Each buf In Selection.Cells
buf.Value = Count
Count = Count + 1
Next
End Sub
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
}
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
}
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みたいにできるようになったらいいな。
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みたいにできるようになったらいいな。
2010年2月17日水曜日
ASEでPython ファイルを開いてみた
以下のスクリプトを実行した。
f = open('log.txt', 'a')
try:
f.wirte('hello, world.\n')
except Exception, e:
f.write(str(e) + ' : Error \r\n')
finally:
f.close()
そしたらエラーが発生した。
IOError: [Errno 30] Read-only file system: 'log.txt'
というメッセージが出力された。
ファイルに残せないなんてorz
f = open('log.txt', 'a')
try:
f.wirte('hello, world.\n')
except Exception, e:
f.write(str(e) + ' : Error \r\n')
finally:
f.close()
そしたらエラーが発生した。
IOError: [Errno 30] Read-only file system: 'log.txt'
というメッセージが出力された。
ファイルに残せないなんてorz
登録:
投稿 (Atom)