c. FileXYの変更に伴う第10章のプログラムの修正

1.エクスプローラ等で変更したAmpere.cpv、Ampere.hpv、CollecXY.cpv、CollecXY.hpv、

  FileXY.cpv、FileXY.hpvをフォルダー名SaveLoadにコピーする。

2.WorkFrame IDEアイコンをダブルクリックし、「既存のプロジェクトを

  オープンします」をクリックする。

  SaveLoad.IWPを開く。

3.ビジュアル・ビルダーを起動する。

4.「ファイル」->「ロード」をクリックし、「ファイル−ロード」ダイアログから、

  順次SaveLoad.vbb、DataColl.vbb、ElectMag.vbbをロードする。

5.非ビジュアル・パーツのAmpere、CollecXYとFileXYを選択し、「パーツ」->

  「生成」->「ソース・コード」をクリックし、Ampere.cpp、Ampere.hpp、

  CollecXY.cpp、CollecXY.hpp、FileXY.cppとFileXY.hppを自動作成する。

6.「パーツ」->「新規作成」をクリックし、コメントをセーブ・ロードするための

  パーツAddCommtを作成する。

非ビジュアル・パーツ

AddCommtパーツの機能設定

クラス名

AddCommt

説明

独自のコメントを記入するためのパーツ

ファイル名

SaveLoad

パーツ・タイプ

非ビジュアル・パーツ

基底クラス

IStandardNotifier

.hpvファイル

AddCommt.hpv

.cpvファイル

AddCommt.cpv

インクルード・ファイル

<fstream.h> _FSTREAM_

 

AddCommtパーツ

属性

タイプ

コメント

優先

distance

double

距離

O

minimumCurrent

double

最小電流値

O

maximumCurrent

double

最大電流値

O

numberOfData

long

データ数

O

typeOfIncrement

IString

増加間隔

O

アクション

タイプ

パラメータ

優先

exportToFile

int

const IString& filename

O

importFromFile

int

const IString& filename

O

7.「ファイル」->「保管および生成」->「フィーチャー・ソース」をクリックし、

  「すべて生成」をクリックし、AddCommt.cpvとAddCommt.hpvを自動作成する。

8.AddCommt.cpvを下記のように修正する。

int AddCommt::exportToFile(const IString& filename)
{
 ofstream ofStream( filename );
 
 if( !ofStream ) // ファイルがオープンできない場合
 {
  IString errorText = IString( "ファイル" ) + filename + "オープンできません。";
  IException exc( errorText, 0, IException::unrecoverable );
  ITHROW( exc );
 }
 
 ofStream << "%磁界の計算結果" << endl;
 ofStream << "%距離= " << iDistance << " [m]" << endl;
 ofStream << "%最小電流値= " << iMinimumCurrent << " [A]" << endl;
 ofStream << "%最大電流値= " << iMaximumCurrent << " [A]" << endl;
 ofStream << "%データ数= " << iNumberOfData << endl;
 ofStream << "%増加間隔 " << iTypeOfIncrement << endl;
 ofStream << "%電流 [A] 磁界 [A/m] " << endl;
 ofStream.close();
 
 return 0;
}
 
int AddCommt::importFromFile(const IString& filename)
{
 IString iText;
 IString iCharacter;
 IString iType;
 double iValue1, iValue2, iValue3, iValue4;
 ifstream ifStream( filename );
 
 if( !ifStream ) // ファイルがオープンできない場合
 {
  IString errorText = IString( "ファイル" ) + filename + "オープンできません。";
  IException exc( errorText, 0, IException::unrecoverable );
  ITHROW( exc );
 }
 
 iText = IString::lineFrom( ifStream );
 if( iText!=IString( "%磁界の計算結果" ) )
 {
  IString errorText = IString( "このプログラムのデータではありません。");
  // 確認のためメッセージを表示するが、続けてロードする。(IException::recoverable)
  IException exc( errorText, 0, IException::recoverable );
     ITHROW( exc );
 }
 
 ifStream >> iCharacter >> iValue1 >> iCharacter;
 ifStream >> iCharacter >> iValue2 >> iCharacter;
 ifStream >> iCharacter >> iValue3 >> iCharacter;
 ifStream >> iCharacter >> iValue4;
 ifStream >> iCharacter >> iType;
 iText = IString::lineFrom( ifStream );
 ifStream.close();
 
 setDistance( iValue1 );
 setMinimumCurrent( iValue2 );
 setMaximumCurrent( iValue3 );
 setNumberOfData( iValue4 );
 setTypeOfIncrement( iType );
 return 0;
}

9.「ファイル」->「保管および生成」->「パーツ・ソース」をクリックする。

10.ビジュアル・ビルダー・プロジェクトに戻り、ビジュアル・パーツのMainを

   ダブルクリックし、Mainのコンポーネント・エディターを開く。

11.CollecXY1のdataXとAmpere1のcalcとの接続上をダブルクリックし、「イベント−

   アクション間接続」ダイアログのパラメータの設定」をクリックする。

12.「定数パラメータ値の設定」ダイアログの c に 'H' と入力する。

13.CollecXY1をダブルクリックし、typeOfIncrementにlinearを代入する。

14.FileXY1をダブルクリックし、addCommentにyesを代入する。

   (typeにspaceが入力されていることを確認する。)

15.「オプション」->「パーツの追加」をクリックし、AddCommt*を追加する。

16.下図のように配置する。

17.次の接続を追加する。

No.

接続元

接続先

コメント

1

FileXY1

(exportToFileAddComment, イベント)

AddCommt1

(exportToFile, アクション)

 

2

接続1

(filename, 属性)

FileXY1

(itemsFilename, 属性)

 

3

接続1

(exceptoinOccured, イベント)

MessageBox2

(showException, アクション)

 

4

FileXY1

(importFromFileAddComment, イベント)

AddCommt1

(imoprtFromFile, アクション)

 

5

接続4

(filename, 属性)

FileXY1

(itemsFilename, 属性)

 

6

接続4

(exceptionOccured, イベント)

MessageBox2

(showException, アクション)

 

7

Ampere1

(distance, 属性)

AddCommt1

(distance, 属性)

 

8

CollecXY1

(minimumDataX, 属性)

AddCommt1

(minimumCurrent, 属性)

 

9

CollecXY1

(maximumDataX, 属性)

AddCommt1

(maximumCurrent, 属性)

 

10

CollecXY1

(number, 属性)

AddCommt1

(numberOfData, 属性)

 

11

CollecXY1

(typeOfIncrement, 属性)

AddCommt1

(typeOfIncrement, 属性)

 

18. 「ファイル」->「保管および生成」->「ソース・コード」をクリックする。

19.「ファイル」->「保管および生成」->「ソースのmain()」をクリックする。

20.「プロジェクト」->「通常ビルド」をクリックし、実行ファイルを作成する。