第38講 データベースソフト(住所録)の制作=並列処理の練習☆☆
第14話 ファイルの各サブメニューのコードの解説その6(関数bool dco(String^ d)の役割その1)
コード再掲
bool dco(String^ d){
dataGridView1->Rows->Clear();
StreamReader^ r=gcnew StreamReader(d);
marshal_context^ c=gcnew marshal_context();
String^ mh;
char i=0,j=0;
while(1){
mh=r->ReadLine();
if(mh!=L"System.IO.StreamWriter"){
u[j][i]=c->marshal_as<string>(mh);
i++;
if(i==18){
i=0;
j++;
}
}
else
break;
}
for(i=0;i<j;i++){
dataGridView1->Rows->Add();
dataGridView1[0,i]->Value=marshal_as<String^>(u[i][17]);
if(u[i][0]=="1")dataGridView1[1,i]->Value=L"自宅";
if(u[i][0]=="2")dataGridView1[1,i]->Value=L"会社";
dataGridView1[2,i]->Value=marshal_as<String^>(u[i][1]);
if(u[i][2]=="1")dataGridView1[4,i]->Value=L"様";
if(u[i][2]=="2")dataGridView1[4,i]->Value=L"殿";
if(u[i][2]=="3")dataGridView1[4,i]->Value=L"御中";
if(u[i][2]=="4")dataGridView1[4,i]->Value=L"行";
if(u[i][2]=="5")dataGridView1[4,i]->Value=L"宛";
if(u[i][2]=="6")dataGridView1[4,i]->Value=L"係";
if(u[i][2]=="7")dataGridView1[4,i]->Value=L"気付";
dataGridView1[3,i]->Value=marshal_as<String^>(u[i][3]);
if(u[i][4]=="1")dataGridView1[5,i]->Value=L"友人";
if(u[i][4]=="2")dataGridView1[5,i]->Value=L"知人";
if(u[i][4]=="3")dataGridView1[5,i]->Value=L"親類";
if(u[i][4]=="4")dataGridView1[5,i]->Value=L"上司";
if(u[i][4]=="5")dataGridView1[5,i]->Value=L"部下";
if(u[i][4]=="6")dataGridView1[5,i]->Value=L"同僚";
if(u[i][4]=="7")dataGridView1[5,i]->Value=L"取引先";
dataGridView1[6,i]->Value=marshal_as<String^>(u[i][5]);
dataGridView1[7,i]->Value=marshal_as<String^>(u[i][6]);
dataGridView1[8,i]->Value=marshal_as<String^>(u[i][7]);
dataGridView1[9,i]->Value=marshal_as<String^>(u[i][8]);
dataGridView1[10,i]->Value=marshal_as<String^>(u[i][9]);
dataGridView1[11,i]->Value=marshal_as<String^>(u[i][10]);
dataGridView1[12,i]->Value=marshal_as<String^>(u[i][11]);
dataGridView1[13,i]->Value=marshal_as<String^>(u[i][12]);
dataGridView1[14,i]->Value=marshal_as<String^>(u[i][13]);
dataGridView1[15,i]->Value=marshal_as<String^>(u[i][14]);
dataGridView1[16,i]->Value=marshal_as<String^>(u[i][15]);
dataGridView1[17,i]->Value=marshal_as<String^>(u[i][16]);
}
m=j-1;
r->Close();
return(true);
}
コード解説
関数bool dco(String^ d)の役割は、もうお分かりですね。
ファイルを開いて、
へとデータを書き込んでいます。
1行ごと追っていきましょう。
dataGridView1->Rows->Clear();
では一度一覧表型のデータをクリアしています。
これは、すでにソフトが開いてありデータが書き込まれている場合すべての表示を消して
の状態にする必要があるからです。
したがってこのソフトの仕様では、ファイルを開くときはデータをいったん別名で保存しないとデータは消失してしまいます。
現在の仕様では、今日加えたデータに過去のデータを足すことはできないわけです。
ですから、過去のデータを開きそれにデータを加えていくしかないわけです。
開くとは普通新規に開くことですから、いったんは表示されているデータはすべてクリアする必要があります。
もし、今作業したデータに過去のデータを加えたいならば、
ファイルに『現在のデータに過去のデータを追加する』などを加えなければならないでしょう。
その時は、その専用の関数を用意しなければなりません。
関数bool dco(String^ d)の任務は、新規に開くです。
StreamReader^ r=gcnew StreamReader(d);
では、StreamReader^型の変数rを新たに宣言しています。
dって何?
そうですよね。
わかりにくいですよね。
bool dco(String^ d){
dataGridView1->Rows->Clear();
StreamReader^ r=gcnew StreamReader(d);
色を付けるとお分かりでしょうか。
dco(L"住所録データ1.csv");で命令が実行されていましたから
StreamReader^ r=gcnew StreamReader(L"住所録データ1.csv");
です。
つまり、ファイル名L"住所録データ1.csv"のデータをCSV形式で収納する箱rを用意しなさいです。
VC++講義第1部へ
vb講義へ
VB講義基礎へ
初心者のための世界で一番わかりやすいVisual C++入門基礎講座
初心者のための世界で一番わかりやすいVisual
Basic入門基礎講座
初心者のための世界で一番わかりやすいVBA入門講義(基礎から応用まで)