シリアル化によるファイル処理の読み込みについて質問します。
csvファイルの読み込みについて以下のようにしたのですが、「データが終了の時、読み込みを終了する」とするために“NULL”を使ったのですが「error C2593: 'operator ==' があいまいです。」とエラ−が出ました。
この場合どうすればよいのでしょうか?よろしくお願いします。
void CFileDoc::Serialize(CArchive& ar){
CString ss;
if (ar.IsStoring()){
}else{
for(int i=0;;i++){
ar >> ss;
if(ss==NULL) break;
sscanf_s(ss,"%s,%s,%s",&Data[i][0],&Data[i][1],&Data[i][2]);
}
}
}
if( ss=="" )break;
ではどう?
if( ss.IsEmpty() )break;
でもいけたかと
ありがとうございます。これを元に以下のようなコードに修正しました。
今回はエラーこそでなかったものの、実行して“ファイルを開く”と、
「File.exe の 0x1023beef (msvcr80d.dll) でハンドルされていない例外が発生しました: 0xC0000005: 場所 0x003ae000 に書き込み中にアクセス違反が発生しました。」というメッセージがでてきました。
いろいろいじってみたところ、「sscanf_s()」あたりがおかしいように、どうなのでしょうか?またどう修正すればいいのでしょうか?
void CFileDoc::Serialize(CArchive& ar){
CString ss;
if (ar.IsStoring()){
}else{
for(int i=0;;i++){
ar.ReadString(ss);
if(ss.IsEmpty() )break;
sscanf_s(ss,"%s,%s,%s",&Data[0][0],&Data[0][1],&Data[0][2]);
}
}
}
読み込んだファイルの中身と
Dataという変数がどう定義されているのか
わからないので、なんとも言えない
デバッグモードで動かしてるなら
おかしなことが発生したところで止まってくれる
#発生箇所が原因とは限らないが
とりあえず、ssの中身が、ReadStringにて
予定されたものがきちんと入ってるかどうか
ウォッチなどを使って確認してみてはどうでしょう
変数「Data」は、
アクセス:public、種類:CString[50][3]、変数名:Dataです。
読み込むファイルはテキストファイルで、
中身は、
Aは,Bに,Cする
Bは,Dに,Eする です。
MFCのシングルドキュメントを使っていて、それ以外は変更していません。
CString変数に対して %s は使えませんよ。
GetBuffer関数を使うか、TCHAR型変数を介してCString変数に入れないといけないでしょう。
カンマが2つと決まっているのであれば、Tokenizeメソッドを使って分割してみては?
(もしくはFindメソッド→Midメソッドで分割)
訂正)
>GetBuffer関数を使うか
GetBufferメソッドを使うか
ちなみに
>アクセス:public、種類:CString[50][3]、変数名:Dataです。
列数が固定で行数が決まっていないのであれば(構造体をメンバとする)CArrayとかvectorを使ったほうが便利でしょう。
ありがとうございます。
Tokenizeメソッドを使って分割、読み込むことが出来ました。
で、まだ質問があるのですが、シリアル化機能を使ってファイルを読み込んだ直後に、自動的にビュークラス内のメンバ関数にアクセスするにはどうすればよいのでしょうか?
理想は CDocument::UpdateAllViews メソッドですかね?
ツイート | ![]() |