アスキーファイルを読み込むにはどうすればいいんですか?
バイナリーは読めます
???
アスキーファイルとは?
テキストファイルのことですか?
あと,どの様にして扱おうとしているのでしょう。
・API / システムコールレベル
このレベルでは,全てバイナリファイルとして扱うことになります。
プログラムがテキストファイルだと考えて取り扱えばテキストファイルですし,
バイナリファイルだと考えて取り扱えばバイナリファイルです。
・ライブラリレベル
a) stdio.h
fopen(filename, "r");
だとテキストファイル,
fopen(filename, "rb");
だとバイナリファイルとして扱われます。
基本的には改行コードの変換程度ですけどね。
b) iostream
std::ifstream fin(filename);
だとテキストファイル,
std::ifstream fin(filename, std::ios::binary);
だとバイナリファイルとして扱われます。
テキストファイルです。今、こういう状態です。
// 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);
}
}
CArchive::ReadString ではだめなのでしょうか?
どう直せばいいんですか?
ar >> Data[i][j];
をこんな感じでしょうか
{
CString strData ;
if ( ! ar.ReadString( &strData ) ) {
異常処理
}
Data[i][j] = atoi( (LPCTSTR)strData ) ;
}
異常処理とは何ですか?
ちと違うみたい。
> 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の場合であることがわかります。
とりあえず,自分の手持ちの物を調べてみることは重要だと思いますよ。
間違ってました? すみません。
>参照で受けるので,アドレス演算子は不要です。
あ!確かに。
>キャストしなくてもいいです。
これはわかってましたが、 CString のHELPが推奨だと
思ってて、初心者の方にはマイクロソフト推奨で書かなければ...
と考えた次第です。
> 異常処理とは何ですか?
正常に終了しなかった場合ですw
この場合でしたら TRACE出力・メッセージボックス表示後、return
がいいのでしょうか。
アプリケーションによっては Data 配列をクリアする必要も
あるかもしれません。
> >キャストしなくてもいいです。
> これはわかってましたが、 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
ツイート | ![]() |