バイナリエディタのような表示
下記のようなバイナリエディタの表示をスクリプトで作成します。
43 6C 72 4D 6F 6E 28 29 0D 0A 53 68 6F 77 4D 6F ClrMon()..ShowMo
6E 28 20 74 72 75 65 20 29 0D 0A 0D 0A 70 61 74 n( true )....pat
68 20 3D 20 22 63 3A 5C 5C 74 65 6D 70 5C 5C 62 h = "c:\\temp\\b
69 6E 64 69 73 70 2E 6C 75 61 22 0D 0A 66 69 6C indisp.lua"..fil
65 20 3D 20 69 6F 2E 6F 70 65 6E 28 20 70 61 74 e = io.open( pat
68 2C 20 22 72 62 22 20 29 0D 0A 0D 0A 69 66 20 h, "rb" )....if
66 69 6C 65 20 7E 3D 20 6E 69 6C 20 74 68 65 6E file ~= nil then
0D 0A 0D 0A 09 2D 2D 20 83 74 83 40 83 43 83 8B .....-- ファイル
83 54 83 43 83 59 8E E6 93 BE 0D 0A 09 63 75 72 サイズ取得...cur
:
:
ScriptEditor に下記のスクリプトを貼り付けて、path を適当なファイル名に置き換えて実行して下さい。実行結果をデバッグモニタに表示します。
ClrMon()
ShowMon( true )
-- Stabilizerにフォーカスが移動するまで若干のウェイト
Wait( 10 )
path = "c:\\temp\\bindisp.lua"
file = io.open( path, "rb" )
if file ~= nil then
-- ファイルサイズ取得
cur = file:seek()
size = file:seek( "end" )
file:seek( "set", cur )
-- 全読込み
data = file:read( "*all" )
file:close()
str = ""
text = ""
for i=1, size do
-- 16進表示
str = str .. string.format( "%02X ", string.byte( data, i ) )
b = string.byte( data, i )
temp = string.format( "%c", b )
-- テキスト表示
-- 制御コードは"."に置き換え
if b >= 0 and b < 0x20 or b == 0x7f then
temp = "."
end
text = text .. temp
r = i % 16
if r == 0 then
str = str .. " " .. text
DOut( str )
DOut( "\n" )
str = ""
text = ""
-- 8バイト目と9バイト目にはスペースを1つ追加
elseif r == 8 then
str = str .. " "
end
end
-- 最終行を表示
r = size % 16
if r > 0 then r = 16 - r end
if r ~= 0 then
n = r * 3 + 1
if r > 8 then n = n + 1 end
str = str .. string.rep( " ", n ) .. text
DOut( str )
end
else
DOut( "Failed to open file :", path )
end