- - PR -
[非 .net] VBAで機種依存文字のチェック
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2004-02-10 18:36
あ!そうですね... 申し訳無いです、ご指摘ありがとう御座います。 これは早速、訂正しておきます。 | ||||||||||||
|
投稿日時: 2004-02-10 20:49
VBでも、文字の「1」と数値の「1」は別物ですよ。 暗黙変換を定石にしちゃってるからだと思いますが・・・。 そういった定石は捨てた方がいいです。 そこを理解しておかないと、危険です。 とりあえず、文字と数値が一緒だというのは、バグを招きかねない思考なので、周りにそういった技術者がいるとしたら、訂正しておいた方がいいです。 #って随分スレッドからずれたな・・・。 追記: 値を内部的にどう保持しているかを知っておくといいと思います。 試しに敢えてVBでバイナリビューワを作ると理解できるかもしれません。 #って余計なお世話かも・・・。 [ メッセージ編集済み 編集者: NAL-6295 編集日時 2004-02-10 20:52 ] [ メッセージ編集済み 編集者: NAL-6295 編集日時 2004-02-10 20:53 ] | ||||||||||||
|
投稿日時: 2004-02-10 21:18
余計なお世話かもしれませんが、この「機種依存」は、どの程度の厳密さを
求めているのでしょうか。 (Excelとは無関係に)機種依存文字を弾きたい、という話があると、 「Windowsで表示できる機種依存文字」のコードの範囲を調べてソレを弾く 作りにしてしまっているのが多いような気がしますが、できることなら 正当な(JIS X 0201,JIS X 0208で決まっている)文字のSJISでのコードの 範囲を調べて、それ以外を機種依存にしたほうがよりいいのじゃないか、 とか常日頃思えてしまってしょうがありません また、Excel限定にしてもうまくいかないデータも有りますね。 ・オートコレクトが効く状態(標準)で、(c),(r),(tm)などを入力 ・(Windows2000/XPで?) IMEからUnicodeにしかない文字を選択して入力 ・その他、Unicodeが表示できるアプリからのコピー&ペースト などの方法を使うことにより、Unicodeにしか無い文字をExcel上に入力できます。 ASC関数の定義が怪しいですが、 (少なくともExcel2000では) Unicodeにあり、SJISに無い文字の扱いは ・アクセント記号つきの英字など、基本の文字がある場合 → アクセント記号無しの英字が返る ・その他 → 0x3F(10進で63)、"?"の文字コードが返る ようです。 # まあ WindowsAPIのUnicode関連の関数はそんなもののような気もします。 そんなデータを考慮するのであれば、 ・Asc()の結果が 0x20(32)〜0x7F(127) で AscW()の結果が 0x80(128)〜0xFF(255)の場合 ・Asc()の結果が 0x3F(63) で AscW()の結果が 0x3F以外の場合 も、機種依存扱いでいいような気もします。 # そんなデータ入れないか…。 | ||||||||||||
|
投稿日時: 2004-02-10 21:27
そこまで狭めなくても ・Asc()の結果が 0x20(32)〜0x7F(127) で AscW()の結果が 0x20〜0x7Fではない場合 でよかったような… | ||||||||||||
|
投稿日時: 2004-02-10 21:58
はにまるです。
ごめんなさい、一緒だと言い切っていますね... 「同一視されている事が多い」が適切ですね。 ご指摘ありがとうございます。 これもまた訂正
パートナーさんに質問してみました。やっぱり理解していない... お伝えすると、「ま〜VBですから関係無いでしょ、後テストもしますし」って... それ以上、何も言えなかった..というか言う気がしなかった..TT (これパートナーさん見てたら誰か、ばれるな!)
ごめんなさい、ずらしてしまいました。 ただ、私に取って結構、お勉強になりました。(教育には気を付けよ!) 皆様、ありがとうございます。 | ||||||||||||
|
投稿日時: 2004-02-10 22:27
超蛇足ですが、 double型の0.0001を1万回足したら何になるか質問して見てください。 1と言ったら危険です。 #ってこれこそ余計なお世話ですね。 [ メッセージ編集済み 編集者: NAL-6295 編集日時 2004-02-10 22:31 ] | ||||||||||||
|
投稿日時: 2004-02-11 01:44
こんばんわ。
確かに話がそれていますが^^; >暗黙変換を定石にしちゃってるからだと思いますが・・・。 これはやっぱりまづいですね。出来るからやっちゃえみたいなのは・・ あと、突っ込む人がいなかったので。 VBには文字列型が存在しますが、Cには文字列型はありません。 あるのは文字配列です。似てるようで、違う・・・らしい(ぉ あと、はにまるさん、なにやら難しく考えていらっしゃるようですが、 まず最初に大切なことは、コンピュータは0か1の数値しか扱えないということです。 どんな言語であろうと、メモリ上に文字自体が書き込まれるはずはなく・・・ で、もう少し具体的に(じゃないかも)、signed と unsignedの使い道ですが
とかすると怒られます(たぶん、、、あえてやるものじゃないので ためしてもないですが^^;) たまーに、必要なことがあるんですよね・・・ ※なんだか適当ですみません^^; | ||||||||||||
|
投稿日時: 2004-02-11 12:00
はにまるさん、こんにちは。
#話題がどんどんずれていく...。
VBだから問題なんですよね〜。で、大体、テストでは問題なくても、実運用で問題が発生してしまうという...。 ありがちなのが、こういう↓パターン。
それと、はまりやすいのが、文字列を返す関数。 ほとんどの場合、戻り値が内部処理形式 String の Variantだったりするので、例えば Left$()とかMid$()とか、明示的に戻りの型を指定しないと思わぬところで躓いてしまいます。 以前、データを加工してファイルに出力する処理をやっていた知り合いが、「訳のわからん制御文字がデータに含まれてしまう」と言って悩んでいましたが、原因はこの手の関数のせいで、書き込むデータが意図せず Variant 型となってしまった為でした...。 |