テキストファイルから読み込みで
System::IO::FileStream^ fs = gcnew System::IO::FileStream("test.txt", System::IO::FileMode::Open, System::IO::FileAccess::Read);
System::IO::StreamReader^ sr = gcnew System::IO::StreamReader(fs);
array<String^>^ fileBody;
int i;
for(i=0; sr->Peek()>=0; i++){
fileBody[i] = sr->ReadLine();
bodyMax = i+1;
}
sr->Close();
fs->Close();
と言うコードを書いたところ、
「fileBody[i] = sr->ReadLine();」
で、NullReferenceExceptionエラーで実行が中断されてしまいます。
test.txtの中身は
----------
ああああ
いいいい
うううう
ええええ
(省略)
----------
となっていて、行数を把握することが出来ないので「sr->Peek()>=0」としました。
ここを「fileBody[i] = sr->ReadLine()) == NULL」とした時、
'int' 型から 'System::String ^' 型への変換ができません。
というエラーが発生し悩んでおります。
原因はfileBodyであることは分かるのですが、何がいけないのか分からない状態です。
ご教示お願い致します。
環境はWindowsXP(SP2)、VisualC++2005です。
fileBody が空だから。
array<String^>^ fileBody = gcnew array<String^>[10];
ってやっとけば、10行分読めます。
追記です。
「String^ fileBody = ReadToEnd()」で解決できるのですが、
「うううう」の部分を「かかかか」に置き換える作業を行いたいため、
1行ずつ確保し、検索、置換を行おうとしているのですが、
for(i=0; i<bodyMax; i++){
if(fileBody[i]->Contains(L"うううう") == true) {
(省略)
}
}
の「fileBody[i]->Contains(L"うううう") == true」でも同様の
NullReferenceExceptionエラーが発生してしまいます。
fileBodyの中で一体何が行われているのかご教示お願い致します。
επιστημηさん有難うございます。
テキストファイルの行数が分からない場合、
array<String^>をどう確保すればよいでしょうか?
再びご教示お願い致します。
すみません。
馬鹿なことをお聞きしました。
ArrayListにすれば解決することが出来ました。
ありがとうございました。
>ArrayListにすれば解決することが出来ました。
List<String^>のほうが最適でしょう。
参考
http://www.atmarkit.co.jp/fdotnet/vb2005/vb2005_02/vb2005_02_01.html
ツイート | ![]() |