ファイル


あん  2002-10-17 23:44:31  No: 50471

アスキーファイルを読み込むにはどうすればいいんですか?
バイナリーは読めます


YuO  2002-10-18 00:04:20  No: 50472

???
アスキーファイルとは?
テキストファイルのことですか?

あと,どの様にして扱おうとしているのでしょう。

・API / システムコールレベル
このレベルでは,全てバイナリファイルとして扱うことになります。
プログラムがテキストファイルだと考えて取り扱えばテキストファイルですし,
バイナリファイルだと考えて取り扱えばバイナリファイルです。

・ライブラリレベル
a) stdio.h
fopen(filename, "r");
だとテキストファイル,
fopen(filename, "rb");
だとバイナリファイルとして扱われます。
基本的には改行コードの変換程度ですけどね。
b) iostream
std::ifstream fin(filename);
だとテキストファイル,
std::ifstream fin(filename, std::ios::binary);
だとバイナリファイルとして扱われます。


あん  2002-10-18 00:14:59  No: 50473

テキストファイルです。今、こういう状態です。

// CMURADoc シリアライゼーション

void CMURADoc::Serialize(CArchive& ar)
{
  if (ar.IsStoring())
  {
    // TODO: この位置に保存用のコードを追加してください。
  }
  else
  {
    // TODO: この位置に読み込み用のコードを追加してください。
    CFile *cf;
    int i,j;  

    // ファイル名取得
    cf = ar.GetFile();
    FileName = cf->GetFileName();
    // ファイルのデータ読み出し
    for (i = 0; i < 256; i++)
    {
      for (j = 0; j < 256; j++)
      ar >> Data[i][j];

    }
    
    UpdateAllViews(NULL);
  }
}


Mnow  2002-10-18 00:47:55  No: 50474

CArchive::ReadString ではだめなのでしょうか?


あん  2002-10-18 00:54:12  No: 50475

どう直せばいいんですか?


Mnow  2002-10-18 02:08:04  No: 50476

ar >> Data[i][j];

をこんな感じでしょうか

{
  CString strData ;
  if ( ! ar.ReadString( &strData ) ) {
    異常処理
  }
  Data[i][j] = atoi( (LPCTSTR)strData ) ;
}


あん  2002-10-18 05:35:02  No: 50477

異常処理とは何ですか?


YuO  2002-10-18 06:30:00  No: 50478

ちと違うみたい。
>   if ( ! ar.ReadString( &strData ) ) {
if (!ar.ReadString(strData)) {
参照で受けるので,アドレス演算子は不要です。

>   Data[i][j] = atoi( (LPCTSTR)strData ) ;
キャストしなくてもいいです。
Data[i][j] = atoi(strData);
これで,
Data[i][j] = atoi(strData.operator const char *());
というコードを生成してくれます。

> 異常処理とは何ですか?

実質的に,EOFの場合です。
ヘルプには,正常に終了しなかった場合としか書いていないですが,
ソースを見ると,ほぼEOFの場合であることがわかります。

とりあえず,自分の手持ちの物を調べてみることは重要だと思いますよ。


Mnow  2002-10-18 21:36:39  No: 50479

間違ってました?  すみません。

>参照で受けるので,アドレス演算子は不要です。
あ!確かに。

>キャストしなくてもいいです。
これはわかってましたが、 CString のHELPが推奨だと
思ってて、初心者の方にはマイクロソフト推奨で書かなければ...
と考えた次第です。

> 異常処理とは何ですか?
正常に終了しなかった場合ですw
この場合でしたら TRACE出力・メッセージボックス表示後、return
がいいのでしょうか。
アプリケーションによっては Data 配列をクリアする必要も
あるかもしれません。


YuO  2002-10-19 00:19:25  No: 50480

> >キャストしなくてもいいです。
> これはわかってましたが、 CString のHELPが推奨だと
> 思ってて、初心者の方にはマイクロソフト推奨で書かなければ...
> と考えた次第です。

キャストを付けるのは可変個引数だけの方が……。
というのは,
(LPTSTR)(LPCTSTR)strData
などという,馬鹿げたコードを書かないようにするためです。
キャストを書くなら,
static_cast<LPCTSTR>(strData)
のような,C++のキャスト演算子を使った方がよいですね。
static_castならばconst性を排除できないですから。

一応,明示的なキャストを行っていないMSDNの文書。
http://www.microsoft.com/japan/msdn/library/ja/vccore/html/_core_strings3a_cstring_operations_relating_to_c2dstyle_strings.asp


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加