Macromedia Director非公式テクニカルノート

ストリングのバイト数を調べる

ID: FN0108008 Product: Director

Platform: All
Viersion: 7.0.1 and above

1. テキストキャストメンバーのbyteプロパティ

Director 7以降には、ストリングのバイト数を調べる関数はありません。ただ、テキストキャストメンバーのチャンク式については、'byte'プロパティでバイト数を調べることができます (Macromediaテクニカルノート[DR016119]「Director 7以降で文字列のバイト数を調べる」)。これを利用すれば、バイト数を返すユーザー定義関数を書くことができます。

2. バイト数を返すカスタム関数
ユーザー定義関数は、ムービースクリプトとして作成します。メッセージウィンドウで試すと、つぎのような結果が返ります。

[メッセージウィンドウでのテスト]
put xBytes("バイト数は16です")
-- 16

-- [バイト数を返すカスタム関数]
-- ムービースクリプト
on xBytes(sString, sMember)
  -- [パラメータ]
  -- sString: バイト数を調べるストリング
  -- sMember: [オプション]ストリングを格納するテキストキャストメンバー
  -- [1]sStringが文字列かどうかの判定
  if ilk(sString) <> #string then return void -- 文字列でなければvoidを返す
  -- [2]sMemberが指定されているかどうかの判定
  if voidP(sMember) then -- 指定されていなければ
    myMember = new(#text)
    bEraseMember = true
  else
-- 指定されていれば
  -- sMemberのタイプ判定
    if (member(sMember).type <> #text) then -- テキストキャストメンバーでなければ
      myMember = new(#text)
      bEraseMember = true
    else
-- テキストキャストメンバーなら
      myMember = member(sMember)
    end if
  end if

  -- [3]文字列をテキストキャストメンバーに入れてbyteを取得する
  nLength = sString.length
  myMember.text = sString
  nBytes = myMember.char[1..nLength].byte.count
  if bEraseMember then
-- [4]テキストキャストメンバーを新規作成した場合
    erase myMember
  end if
  return nBytes
end

コメントにつけた番号にしたがって解説します。

[1] 最初に、渡されたパラメータが文字列かどうかを判定します。文字列でなければ'void'を返します。したがって、この関数ハンドラには必ず文字列をパラメータとして指定する必要があります。

[2] 'byte'を使うには、テキストキャストメンバーが必要です。テキストキャストメンバーは、関数の2番目のパラメータとして指定します。 ただし、このパラメータはオプションとしました。テキストキャストメンバーの指定がない場合は新規にキャストメンバーを作成します。作成したテキストキャストメンバーは、変数myMemberに格納します。 このテキストキャストメンバーは、スクリプトの終了前に削除します。そのため、キャストメンバーを削除する必要があるということを、変数bEraseMemberを'true'とすることで、設定します。

2番目のパラメータが指定されていれば、そのタイプ判定を行います。テキストキャストメンバーでなければ、やはり新たにキャストメンバーを作成し、myMemberに格納、変数bEraseMemberを'true'に設定します。パラメータがテキストキャストメンバーなら、そのテキストキャストメンバーをmyMemberに格納します。変数bEraseMemberは設定していないので、値を調べれば'void'になります。

[3] 文字列をテキストキャストメンバーmyMemberに入れて、そのバイト数を調べます。まず、渡された文字列sString全体の長さをnLengthに格納します。つぎに、渡された文字列sStringをmyMemberのテキストに設定します。そして、'byte'と関数'count'を使って、文字列全体のバイト数を取得し、値をnBytesに格納します。

[4] テキストキャストメンバーを新規に作成して、bEraseMemberが'true'に設定されていれば、作成したmyMemberを削除します。最後に、取得した値nBytesを返します。

_____

作成者: 野中文雄
作成日: 2001年8月14日


© 2001 and beyond Fumio Nonaka All rights reserved.