ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年4月28日(日) 07:47

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 5 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2005年11月30日(水) 06:51 
オフライン

登録日時: 2005年11月30日(水) 06:38
記事: 32
お住まい: 静岡県の田舎町
文字数を数えるプログラムを作っているのですが、
1バイト文字(a,A,!,・)は正常に動作しますが、
2バイト文字(あ,亜)はうまくできません。
いちおう、文字数を調べるために、バイト数を返す「Len$関数」を使っているのが原因なのはわかっています・・・。

そこで、1バイト文字と2バイト文字を区別するための方法が知りたいです。
よろしく、お願いします。


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2005年11月30日(水) 07:56 
オフライン

登録日時: 2005年5月31日(火) 17:59
記事: 899
お住まい: 東京都
 2バイト文字を1文字として数えたければ自分で作る、
Unicodeに変換してその文字数を数えるなどといった方法があります。

 前者の方式ではCharNext関数が使えると思います。
Declare Function CharNext Lib "user32" Alias "CharNextA" (psz As BytePtr) As BytePtr
この関数は1バイト文字2バイト文字を見分けてきちんと次の文字へのポインタを返します。
文字列の終わりにはEx"\0"の文字が入っているので、
そこに到るまでに何文字あったかを数え上げれば良いというわけです。

 後者の方式ではMultiByteToWideChar関数を使います。
これでUnicodeへ変換した後lstrlenW関数で数えます。
Declare Function lstrlenW Lib "kernel32" (pString As *WCHAR) As Long
Unicode(UTF-16)は原則全ての文字が16ビットですので、
Unicodeで変換してしまえば何も考えずに文字数を数えるだけで良いのです。
(正確にはそうでないのですが通常は十分だと思います)


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2005年11月30日(水) 09:35 
オフライン

登録日時: 2005年8月23日(火) 00:15
記事: 161
お住まい: 沖縄県
手前味噌ですが、以下の記事も参考にして下さい。
SJIS対応文字列処理
UNICODE対応文字列処理


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2005年11月30日(水) 20:22 
オフライン

登録日時: 2005年11月30日(水) 06:38
記事: 32
お住まい: 静岡県の田舎町
ありがとうございます。
早速、試してみたいと思います。


通報する
ページトップ
 記事の件名: 自分で作るなら
投稿記事Posted: 2005年12月01日(木) 18:45 
オフライン

登録日時: 2005年7月25日(月) 13:27
記事: 893
お住まい: 埼玉県東松山市
昔とあるプログラムを作る際のデータベースとして作った現在定義されている文字の全てです。
ただ、選出は手作業なのでちょっと過不足があるかもしれません。

出力コード↓ 出力後に選出した結果↓

_________________
Website→http://web1.nazca.co.jp/himajinn13sei/top.html
ここ以外の場所では「暇人13世」というHNを主として使用。

に署名を書き換えて欲しいと言われたので暇だしやってみるテスト。


通報する
ページトップ
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 5 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: Bing [Bot] & ゲスト[14人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean