初めて投稿させて頂きます。
エディットボックス上のデータ(20040220)の8桁のデータで、
日付の論理チェックしたいのですが、やり方的には、%演算子を使って
日付の余りを計算してチェックするようにしてます。
データ型は、CString型を使ってデフォルト状態でシステム日付を呼び出してますが、
演算をするとデータ型が違うというエラーが出ます。
論理チェックする為には、データ型をint型に変換しないとだめでしょうか?
初歩的な質問ですみません。
環境は、WIN2000、.NET2003でMFCのダイアログベースで作成してます。
書き忘れて申し訳ありません。
どういう演算をしているのかわかりにくいですが、
20040220という文字列を数値演算したいのなら数値型にしないといけません。
論理チェックというのは値の正当性チェックのことでしょうか。
もしそうならば
COleDataTimeの
SetDate()
GetStatus()
あたりが使えると思います。
詳しくはMSDNでどうぞ。
失礼いたしました。
>COleDataTimeの
正しくは
COleDateTimeの
です。
>エディットボックス上のデータ(20040220)の8桁のデータで、
>日付の論理チェックしたいのですが、やり方的には、%演算子を使って
>日付の余りを計算してチェックするようにしてます。
計算するということは、CString型ではダメでしょう。
int型やlong型にする必要があると思います。
>データ型は、CString型を使ってデフォルト状態でシステム日付を呼び出してますが、
>演算をするとデータ型が違うというエラーが出ます。
これは、コンパイルエラーのりことでは?
>論理チェックする為には、データ型をint型に変換しないとだめでしょうか?
CStringでもチェックはできますが、%演算子を使うのであればint型等にしたほうが
よいでしょう。また、MFCであれば最初からメンバ変数でint型を指定すればよいの
では
みなさま回答ありがとうございました。
エディットボックスはコントロール変数にして、
デフォルト値のシステム日付の呼び出しは、CString型で8桁表示にして、
SetWindowText()で表示しました。
日付処理自体はatoiを使って、int型に変換したらうまくできました。
VC自体初めて使ったので、効率の悪い方法だとは思いますが。
余談ですが、CString型でチェックするには、どうしたらいいのですか?
問題は解決したのでチェックは付けましたけど、
やり方が気になりましたので…。
CStringのままチェックと言うのは無理があると思います。
絶対出来ないとは言いませんけれど。
いずれにせよ、年、月、日を文字としてでなく、数値としてチェックする必要が
あるわけですから、最終的には数値に直さざる得ないと思います。
不都合が無ければ、エディットボックスの変数をlongにしておいて
OnOkを追加して、中で処理しても良いような気はしますね。
エディットボックスの設定を数値にしておけば、数値以外は入力できないので
エラーチェックも楽になりますしね。
この辺はエラーメッセージの表示仕様に寄ります。
プログラム側で字種チェック、数値チェック、日付の論理チェックのエラーを
一々出さないといけないようなら文字列で取り込んでそれぞれに対応するチェックを
行い、エラーメッセージを一々出す必要があるでしょう。
ちなみにCStringで文字列を取り込んでもatoiやstrtolとかを使う事は可能なので
ここに関しては特にこだわる必要はないような気がします。
要はOnOkなどのハンドラ内でどういう処理を書くかが問題なのだと思いますし。