ユーザー定義で教えてください

解決


真実  2007-07-25 07:41:51  No: 99238

お世話になります。
Public Type TestDat
 aa As String * 11            '①
End Type
Public T_TestDat As TestDat
を、標準モジュールModule1に作成し

Private Sub Form_Load()
 Open "TESTFILE" For Random As #1 Len = Len(T_TestDat)
  T_TestDat.aa = "1234 東京都中央区"    '②
    Debug.Print T_TestDat.aa  '③
   Put #1, 1, T_TestDat
   Get #1, 1, T_TestDat
    Debug.Print T_TestDat.aa  '④
 Close #1
End Sub
を実行しますと、③と④は同一(イコール)なのですが、①を仮に16バイト
に変更しますと同一になりません。
③と④を同一にしたいのです。
①を奇数値(11,13等)にすると正常の様です。
②のデータ形式は半角・全角が混在し一定ではありません。
プログラムがおかしいのでしょうか。
お教えをお願いします。


魔界の仮面弁士  2007-07-25 23:36:16  No: 99239

「固定長文字列型を持つユーザー定義型」によるランダムアクセスは、
Unicode 処理の関係上、32bit 版ではそのような結果となります。
(16bit 版では結果が一致しますが、2バイト文字の分断などの問題が出ます)

> プログラムがおかしいのでしょうか。
固定長文字列型を使わず、Byte 型配列で読み書きし、文字列操作の際に
StrConv での変換などを組み合わせるなどの対応が必要です。


真実  2007-07-26 16:45:11  No: 99240

魔界の仮面弁士 様  ありがとうございました。
半角と全角が混在すると結構面倒なのですね。
素人考えでは同じMicrosoft製なのだから何とかならないのかと思いますが
漢字文化国では仕方ないのでしょうね。
  この様にお教えいただきますと本当に助かります。
ありがとうございました。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加