SenseTalkを使用したバイナリデータの操作
ほとんどのSenseTalkスクリプトは、テキストと数字の形でデータを操作し、場合によっては日付や色などの他の種類の値を操作します。必要に応じて、SenseTalkはバイナリ形式のデータ(コンピュータに保存される生のビットとバイト)も扱うことができます。
データ値
生のデータは、データの各バイトに対して16進数のペアを使って、スクリプトで直接表現することができます。これらは、< と > の間に入れます。
put <00> into nullByte // 値が0の 1 バイト
put <48656c6c6f> into secretMessage -- 5バイトのデータ
put before
と put after
の形式の put
コマンドは、既存の値の前または後に追加のバイナリデータを挿入するために 使用できます。
put <20467269 656e6421> after secretMessage -- 追加のデータを追加する
二つの既知のバイナリデータ値が等しさを比較されるとき、それらはバイトごとに比較され、全く同じバイナリ内容を持っていることが確認されます。
put secretMessage is <48656c6c6f20467269656e6421> --> True
Syntax:
< hexadecimalData >
_hexadecimalData_は、0から9、AからFの16進数の数値で構成されている必要があります。読みやすさのために、空白を使って列を区切ることができます。
AsData
関数、 As Data
演算子
動作: asData
関数は、最もよく as data
演算子を使用して呼び出され、任意の値をそのバイナリ表現に変換します。
asData
関数または as data
演算子を使用するのは、SenseTalkに値をバイナリデータとして扱うよう指示したいときです。これは、ファイルやURLをその生のバイナリ形式で読み書きする場合(この章の後半で説明)に特に便利ですが、いつでもバイナリ形式で値を扱ったり表示したりするために使用することもできます。
二つの既知のバイナリデータ値が等しさを比較されるとき、それらはバイトごとに比較され、全く同じバイナリ内容を持っていることが確認されます。as data
を使ってそのようなバイナリ比較が行われることを確認します。
Syntax:
asData( aValue )
aValue as data
as data
演算子は通常、asData
関数よりも読みやすく自然に使用することができますが、機能的には同一です。
例:
put "abcdefg" as data --> <61626364 656667>
put file "picture.jpg" as data into rawImageData -- ファイルの内容をデータとして読み込む
if file "monet.png" as data is equal to oldData as data then
// 何かをする
end if
バイトのチャンク
byte
チャンク型は、SenseTalkのチャンク表現を拡張し、バイナリデータを扱う際にチャンク表現が提供する全ての柔軟性を提供します。byte
チャンク型は、データ値内の単一のバイトまたはバイトの範囲にアクセスするために使用できます:
put <010203040506> into myData
put byte 2 of myData --> <02>
put bytes 3 to 4 of myData --> <0304>
put the last 3 bytes of myData --> <040506>
他のチャンク型と同様に、バイトチャンクはコンテナであるため、データを変更するために使用することができます:
put <010203040506> into myData -- <010203040506>
put <AABB> into bytes 2 to 5 of myData -- <01AABB06>
put <77> after byte 2 of myData -- <01AA77BB06>
myDataの最初の2バイトを削除する -- <77BB06>
Syntax:
byte byteNumber of dataSource
bytes firstByte to lastByte of dataSource
バイトチャンク表現は常にその即時のコンテキストでデータとして扱われます(それゆえにそれと共にas data
を指定する必要はありません)。_dataSource_はデータとして指定する必要はありません。非データ値は、要求されたバイトが抽出される前に自動的にデータに変換されます。
バイトチャンクの削除
deleteコマンドはまた、バイナリデータ値の中からバイトチャンクを削除するために使用することができます。これは、削除されたバイトの数によってデータ全体のサイズを減少させます。
例:
myDataのバイト5を削除する
myDataの最後の2バイトを削除する
myDataのバイト100から199までを削除する
バイナリデータファイル
スクリプト内でのバイナリデータの最も重要な用途の一つは、バイナリ(非テキスト)ファイルのデータを読み書きするときです。バイナリデータファイルを操作する方法はいくつかあり、それはあなたのニーズによります。
シンプルなデータファイルアクセス
テキストファイルにアクセスする最も簡単な方法は、ファイルを直接コンテナとして扱うことです。同じアプローチはバイナリデータファイルに対しても機能し、単純にas data
演算子を使用してファイルのバイトを直接読むべきであることを示します:
put file "horse.tiff" as data into tiffData // ファイル全体を一度に読み込みます
同様に、データをファイルに書き込むこともできます:
put rawBudgetData as data into file "budget.dat" // データファイルを書き込みます
リモートURLファイルアクセス
URLを通じてリモートファイルにアクセスするのは、ローカルファイルと全く同じように動作します。単にURL
をfile
の代わりに指定し、ファイルパスの代わりにURLを提供し、as data
を使用します:
URL "http://some.company.com/horse.jpg"をデータとしてjpgDataに配置する
ファイル "budget.dat"をデータとしてURL remoteBudgetFileURLに配置する