- Cluster
- ぬし
- 会議室デビュー日: 2003/03/06
- 投稿数: 289
- お住まい・勤務地: 大阪
|
投稿日時: 2004-02-11 22:30
引用: |
|
JWさんの書き込み (2004-02-10 21:18) より:
また、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以外の場合
も、機種依存扱いでいいような気もします。
# そんなデータ入れないか…。
|
アドバイスありがとうございます。
UNICODEにしかない文字なんて、まるで眼中になかったです。
このあたりのチェックも組み込む方向で検討します。
|
- はにまる
- ぬし
- 会議室デビュー日: 2003/12/19
- 投稿数: 969
- お住まい・勤務地: 誤字脱字の国
|
投稿日時: 2004-02-12 16:58
はにまるです。
引用: |
|
NAL-6295さんより:
double型の0.0001を1万回足したら何になるか質問して見てください。
1と言ったら危険です。
|
引用: |
|
きくちゃんさんより:
VBだから問題なんですよね〜。で、大体、テストでは問題なくても、実運用で問題が発生してしまうという。
|
「まるめ誤差」の問題ですね、、、
や・ば・い!テストケースに盛り込んでいない。TT
早速、対策打合わせをしました... ^^;
で、結果、開発規定書に「浮動小数型の変数の利用は禁止」と追記する事にしました。
# レベルの低い対応ですが、そこまでパートナーさんを管理出来ない..
# 開発規定書で制限を掛けるって、技術者としては、なんか嫌な話だな...
Clusterさんへ>
不要な御節介と思いますが、
機種依存文字の排除の際には、社外帳票と法定帳票に御注意下さい。
社員名、取引先名、住所の場合は、正式名称では無い入力になる為、
業務担当者から苦情が発生する可能性があります。
帳票機能に絞って、入力制限の掛かるフィールドが利用されるか
調査し、業務担当者に事前連絡する事をお勧めいたします。
|
- NAL-6295
- ぬし
- 会議室デビュー日: 2003/01/26
- 投稿数: 966
- お住まい・勤務地: 東京
|
投稿日時: 2004-02-12 17:08
引用: |
|
はにまるさんの書き込み (2004-02-12 16:58) より:
はにまるです。
引用: |
|
NAL-6295さんより:
double型の0.0001を1万回足したら何になるか質問して見てください。
1と言ったら危険です。
|
引用: |
|
きくちゃんさんより:
VBだから問題なんですよね〜。で、大体、テストでは問題なくても、実運用で問題が発生してしまうという。
|
「まるめ誤差」の問題ですね、、、
|
まるめ誤差というよりも、コンピュータは小数点が苦手ってのが本質です。
2進数における小数点以下の各桁を10進数にすると
0.5
0.25
0.125
0.0625
としか表現できない事に起因しています。
#トリビア風に言うと「コンピュータは10進数の0.1を正しく表現できない。」
#って違ってたら誰か突っ込んでください。
|
- ぢゃん♪
- 大ベテラン
- 会議室デビュー日: 2003/06/12
- 投稿数: 208
- お住まい・勤務地: 都内
|
投稿日時: 2004-02-12 17:22
どんどん、どんどん話題がずれていく
引用: |
|
NAL-6295さんの書き込み (2004-02-12 17:08) より:
#トリビア風に言うと「コンピュータは10進数の0.1を正しく表現できない。」
#って違ってたら誰か突っ込んでください。
|
それで合っています。「浮動小数点の」という条件付きですけど。
10進の0.1も、2進では 0.00011001100110011001100…… と無限に続くと思います。
でも、そうでない格納方式もあったります。BCD(2進化10進)とかは、効率は悪いけど10進を正しく格納します。有効桁数の範囲内なら。
.NETでいうと、System.Decimal なのかな?調べたことがないので自信が無いんですけど
[ メッセージ編集済み 編集者: ぢゃん♪ 編集日時 2004-02-12 17:26 ]
|
- Beatle
- ぬし
- 会議室デビュー日: 2003/06/09
- 投稿数: 394
|
投稿日時: 2004-02-12 17:29
引用: |
|
はにまるさんの書き込み (2004-02-12 16:58) より:
Clusterさんへ>
不要な御節介と思いますが、
機種依存文字の排除の際には、社外帳票と法定帳票に御注意下さい。
社員名、取引先名、住所の場合は、正式名称では無い入力になる為、
業務担当者から苦情が発生する可能性があります。
帳票機能に絞って、入力制限の掛かるフィールドが利用されるか
調査し、業務担当者に事前連絡する事をお勧めいたします。
|
超蛇足ですが、法定帳票の場合機種依存文字よりもまずフォントの問題が
先に出ますよね。例の「しめすへん」の「ネ」と「示」とか...
最近は許されるようになったのかな?
|
- Beatle
- ぬし
- 会議室デビュー日: 2003/06/09
- 投稿数: 394
|
投稿日時: 2004-02-12 17:35
本題に戻して...
引用: |
|
Clusterさんの書き込み (2004-02-09 17:39) より:
Excelのマクロで、文字列に含まれる機種依存文字のチェックを行いたいのですが、
どんな方法がいいでしょうか?
前提条件は、
・Excel VBA (Excel2000以降)
・Excel以外の追加モジュール・プログラムをインストールしない
・OSはWindows98以降対応
です。
# 文字コードを取ってきてゴニョゴニュすればいけそうな気がするのですが、
# いまいち良く分からなくて・・・。
# 今は、機種依存文字を1文字ずつ、InStr関数でチェックしていますが、
# もっとスマートな方法がないかと思いまして(^^;
|
コードでの比較の他にも、正規表現ではじくということもできます。
数が多いと大変ですが...
UnicodeについてはとりあえずVBAならStrConvで変換して比較するということ
になるのでしょうけど...Unicodeにしかない機種依存文字って、
StrconvでSJISに変換したらどうなるんでしょうねぇ?
※どんな文字なのかわからない私(^^ゞ
|
- はにまる
- ぬし
- 会議室デビュー日: 2003/12/19
- 投稿数: 969
- お住まい・勤務地: 誤字脱字の国
|
投稿日時: 2004-02-12 17:42
はにまるです。
引用: |
|
ぢゃん♪さんより:
それで合っています。「浮動小数点の」という条件付きですけど。
でも、そうでない格納方式もあったります。BCD(2進化10進)とかは、効率は悪いけど10進を正しく格納します。有効桁数の範囲内なら。
|
旧VBでは、固定小数点の変数型が用意されているので、それで回避です!
引用: |
|
Beatleさんより:
超蛇足ですが、法定帳票の場合機種依存文字よりもまずフォントの問題が
先に出ますよね。例の「しめすへん」の「ネ」と「示」とか...
最近は許されるようになったのかな?
|
以前やったシステムでは、電子帳簿保存法で申請している帳票に関しては、監査法人からOKが出ました。
その対応にIBM拡張漢字の変換一覧を作成しました ^^;
[ メッセージ編集済み 編集者: はにまる 編集日時 2004-02-12 17:43 ]
|
- ぢゃん♪
- 大ベテラン
- 会議室デビュー日: 2003/06/12
- 投稿数: 208
- お住まい・勤務地: 都内
|
投稿日時: 2004-02-12 18:07
引用: |
|
旧VBでは、固定小数点の変数型が用意されているので、それで回避です!
|
ぅわ、余計なこと言っちゃったかな…?
念のためですが、実数を扱う場合、結局どの型を使っても誤差との戦いは避けられませんので。
(たとえば 1÷3 なんて、浮動小数点だろうが2進化10進だろうが必ず誤差は出ます。)
#って、この例だと整数だろうが誤差が出るから意味ないか
[ メッセージ編集済み 編集者: ぢゃん♪ 編集日時 2004-02-12 18:15 ]
|