/********************************************************************************
*	ファイル名：ParameterManager.cpp	
*	用　　　途：パラメータ管理クラス
*	備　　　考：シングルトンパターン
*	履　　　歴：
********************************************************************************/
/****************************
*	 プリコンパイル設定		*
****************************/
#include "stdafx.h"
/****************************
*	 コンパイル環境設定		*
****************************/
/****************************
*	インクルードファイル	*
****************************/
#include "System.h"
#include "ParameterManager.h"
#include "DailyLogManagerS.h"
#include "MySqlControl.h"
/****************************
*		 マクロ定数			*
****************************/
//***** ガード条件
#define GUARD_RETURN( expr, ret )		{ if( !(expr) )	return (ret) ;		}
#define GUARD_RETURN_VOID( expr )		{ if( !(expr) )	return ;			}
#define GUARD_RETURN_FALSE( expr )		{ if( !(expr) )	return FALSE ;		}
#define GUARD_RETURN_NULL( expr, T )	{ if( !(expr) )	return (T *)NULL ;	}
/****************************
*		 構造体定義			*
****************************/

/****************************
*		 クラス定義			*
****************************/
/****************************
*		 関数　宣言			*
****************************/
/****************************
*		 変数　宣言			*
****************************/

/********************************************************************************
*	関数名：CParameterManager
*	用　途：デフォルトコンストラクタ
*	引き数：
*	戻り値：
*	備　考
********************************************************************************/
CParameterManager::CParameterManager(void)
{
	for( INT32 i = 0 ; i < NOF_COLLECT_DATA ; i++ ){
		m_tParamInit.taCollect[i].tpTableCol = NULL ;
		m_tParamInit.taCollect[i].pnCsvColNo = NULL ;

		m_memTableCol[i].Free() ;
		m_memCsvColNo[i].Free() ;
	}
}

/********************************************************************************
*	関数名：~CParameterManager
*	用　途：デストラクタ
*	引き数：
*	戻り値：
*	備　考
********************************************************************************/
CParameterManager::~CParameterManager(void)
{
	for( INT32 i = 0 ; i < NOF_COLLECT_DATA ; i++ ){
		m_memTableCol[i].Free() ;
		m_memCsvColNo[i].Free() ;
	}
}

/********************************************************************************
*	関数名：GetInstance
*	用　途：インスタンス取得（初回は生成）
*	引き数：
*	戻り値：
*	備　考
********************************************************************************/
CParameterManager& CParameterManager::GetInstance(void)
{
	static CParameterManager Singleton;
	return Singleton; 
}

/*******************************************************************************
*	関　数　名：InitParam
*	用　　　途：パラメータの初期化を行う
*	引　き　数：
*	戻　り　値：
*	備　　　考：
********************************************************************************/
INT32 CParameterManager::InitParam()
{
	BOOL bRet ;

	// メモリ確保
	for( INT32 i = 0 ; i < NOF_COLLECT_DATA ; i++ ){
		// テーブル列名
		m_memTableCol[i].SetAllocKind( CMEM_ALLOC_HEAP );
		m_memTableCol[i].Alloc( sizeof( TABLE_COL ) * m_naNofData[i] );
		m_memTableCol[i].Clear();

		// CSV列No
		m_memCsvColNo[i].SetAllocKind( CMEM_ALLOC_HEAP );
		m_memCsvColNo[i].Alloc( sizeof( INT32 ) * m_naNofData[i] );
		m_memCsvColNo[i].Clear();

		// 確保したメモリのポインタ参照
		m_tParamInit.taCollect[i].tpTableCol = ( P_TABLE_COL )m_memTableCol[i].GetPtr() ;
		m_tParamInit.taCollect[i].pnCsvColNo = ( PINT32 )	  m_memCsvColNo[i].GetPtr() ;
	}

	// 初期パラメータの読み込み
	bRet = LoadParamInit() ;

	if( !bRet ) return PARAM_INIT_ERR_LOAD_INIT ;

	return  PARAM_INIT_ERR_NONE ;
}

/********************************************************************************
*	関数名：LoadParamInit									
*	用　途：初期設定ファイルの読み込み				
*	引き数：
*	戻り値：読み込み成功でＴＲＵＥ、失敗でＦＡＬＳＥ
*	備　考											
********************************************************************************/
BOOL CParameterManager::LoadParamInit()
{
	BOOL		bRet ;
	CString		strFile ;
	CIniFile	IniFile ;

	// ファイル名検索(無ければ作成)
	strFile.Format( _T("%s%s"), AbsPath(), INITIALIZE_FILE ) ;
	SubCreateFile( strFile ) ;
	
	// ファイル読み込み
	bRet = IniFile.Load( strFile );

	// Iniファイルデータ→パラメータ構造体
	AccessProfile( FLAG_ACCESS_GET, &m_tParamInit, IniFile );

	//*** データ収集設定
	for( INT32 i = 0 ; i < NOF_COLLECT_DATA ; i++ ){
		// ファイル名検索(無ければ作成)
		strFile.Format( _T("%s\\%s"), AbsPath(PARAM_PATH), m_szParamFile[i] ) ; 
		SubCreateFile( strFile ) ; 

		// ファイル読み込み
		IniFile.Load( strFile );

		// Iniファイルデータ→生産情報テーブル設定構造体
		AccessProfile( FLAG_ACCESS_GET, i, &m_tParamInit.taCollect[i], IniFile ) ;
		
		// 入力パスが空白なら初期パスにする
		if( m_tParamInit.taCollect[i].szDataPath[0] == _T('\0') ) {
			strncpy_s( m_tParamInit.taCollect[i].szDataPath, AbsPath(TMP_PATH), sizeof( m_tParamInit.taCollect[i].szDataPath ) ) ;
		}

		// 生産情報データはサブパス1,2も確認
		if( i == COLLECT_SETTING1 && m_tParamInit.taCollect[i].szDataPathSub1[0] == _T('\0') ) {
			strncpy_s( m_tParamInit.taCollect[i].szDataPathSub1, AbsPath(TMP_PATH), sizeof( m_tParamInit.taCollect[i].szDataPathSub1 ) ) ;
		}
		if( i == COLLECT_SETTING1 && m_tParamInit.taCollect[i].szDataPathSub2[0] == _T('\0') ) {
			strncpy_s( m_tParamInit.taCollect[i].szDataPathSub2, AbsPath(TMP_PATH), sizeof( m_tParamInit.taCollect[i].szDataPathSub2 ) ) ;
		}

		// 行Noは-1しておく
		m_tParamInit.taCollect[i].nCsvSingleRowNo -= 1 ;
		m_tParamInit.taCollect[i].nCsvReportRowNo -= 1 ;

		// 列Noは-1しておく
		for( INT32 j = 0 ; j < m_naNofData[i] ; j++ ){
			m_tParamInit.taCollect[i].pnCsvColNo[j] -= 1 ;
		}
	}

	return bRet;
}

/********************************************************************************
*	関数名：SubCreateKFolder									
*	用　途：フォルダ作成				
*	引き数：										
*	戻り値：
*	備　考											
********************************************************************************/
void CParameterManager::SubCreateFolder( CString strFolder )
{
	CString	strCreatePath ;

	// フォルダが無ければ作成
	strCreatePath = strFolder ;
	::CreateDirectory( strCreatePath, NULL ) ;
}

/********************************************************************************
*	関数名：SubCreateFile									
*	用　途：ファイル作成				
*	引き数：										
*	戻り値：
*	備　考											
********************************************************************************/
void CParameterManager::SubCreateFile( CString strFile )
{
	BOOL		bFind ;
	CFileFind	filefind ;
	FILE		*tpFile = 0 ;

	// ファイルが無ければ作成
	bFind = filefind.FindFile( strFile ) ;
	
	if( !bFind ){
		fopen_s( &tpFile, strFile, _T("wt") ) ;
		fclose( tpFile ) ;
	}
}

/********************************************************************************
*	関数名：AccessProfile
*	用　途：ファイルにアクセスする
*	引き数：アクセスフラグ、初期パラメータ情報格納場所
*	戻り値：
*	備　考
********************************************************************************/
void CParameterManager::AccessProfile( FLAG_ACCESS eAccessFlag, P_PARAM_INIT tpDst, CIniFile& IniFile )
{
	CString		strSection, strDefault ;
	TCHAR		*sec, *def ;
	INT32		nDefault;

	//*** DB情報
	strSection.Format( _T("DB") ) ;	sec = (TCHAR *)(LPCTSTR)strSection;

	// HOST名
	strDefault.Format( _T("%s"), DB_DEFAULT_HOST );		def = (TCHAR *)(LPCTSTR)strDefault;
	IniFile.AccessProfile( eAccessFlag, sec, _T("Host")		, &(tpDst->szDbHost)	, DATA_ATTR_STRING, def ) ;

	// ユーザー名
	strDefault.Format( _T("%s"), DB_DEFAULT_USER );		def = (TCHAR *)(LPCTSTR)strDefault;
	IniFile.AccessProfile( eAccessFlag, sec, _T("User")		, &(tpDst->szDbUser)	, DATA_ATTR_STRING, def ) ;

	// パスワード
	strDefault.Format( _T("%s"), DB_DEFAULT_PASSWORD ); def = (TCHAR *)(LPCTSTR)strDefault;
	IniFile.AccessProfile( eAccessFlag, sec, _T("Password")	, &(tpDst->szDbPassword), DATA_ATTR_STRING, def ) ;

	// DB名
	strDefault.Format( _T("%s"), DB_DEFAULT_DBNAME );	def = (TCHAR *)(LPCTSTR)strDefault;
	IniFile.AccessProfile( eAccessFlag, sec, _T("DbName")	, &(tpDst->szDbName)	, DATA_ATTR_STRING, def ) ;

	// DBポート番号
	IniFile.AccessProfile( eAccessFlag, sec, _T("DbPortNo") , &(tpDst->uDbPortNo)	, DATA_ATTR_UINT32, &(nDefault = MYSQL_PORT));		
}

/********************************************************************************
*	関数名：AccessProfile
*	用　途：ファイルにアクセスする
*	引き数：アクセスフラグ、初期パラメータ情報格納場所
*	戻り値：
*	備　考：生産情報テーブル設定
********************************************************************************/
void CParameterManager::AccessProfile( 
										FLAG_ACCESS		eAccessFlag,
										INT32			nCollectIndex,
										P_PARAM_COLLECT tpDst,
										CIniFile&		IniFile
									 )
{
	CString		strSection, strKey, strDefault ;
	TCHAR		*sec, *key, *def ;
	BOOL		bDefault ;
	INT32		nDefault ;
	INT32		nColOffset ;

	//*** 共通データ
	strSection.Format( _T("CollectData") ) ; sec = (TCHAR *)(LPCTSTR)strSection;

	// データフォルダパス
	strDefault.Format( _T("%s"), AbsPath(TMP_PATH) ); def = (TCHAR *)(LPCTSTR)strDefault;
	IniFile.AccessProfile( eAccessFlag, sec, _T("DataPath")		, &(tpDst->szDataPath)	, DATA_ATTR_STRING, def ) ;

	// ファイル移動フラグ
	IniFile.AccessProfile( eAccessFlag, sec, _T("FileMove")		, &(tpDst->bFileMove)	, DATA_ATTR_BOOL, &(bDefault=FALSE) ) ;

	// ファイル移動フォルダパス
	strDefault.Format( _T("%s"), AbsPath(TMP_PATH) ); def = (TCHAR *)(LPCTSTR)strDefault;
	IniFile.AccessProfile( eAccessFlag, sec, _T("MovePath")		, &(tpDst->szMovePath)	, DATA_ATTR_STRING, def ) ;

	// ファイル移動時上位フォルダコピーフラグ
	IniFile.AccessProfile( eAccessFlag, sec, _T("UpFolderCopy")	, &(tpDst->nUpFolderCopy), DATA_ATTR_INT32, &(nDefault=0) ) ;
	
	// 1フォルダあたりの最大ファイル数
	IniFile.AccessProfile( eAccessFlag, sec, _T("FilesInFolder"), &(tpDst->uFilesInFolder), DATA_ATTR_UINT32, &(nDefault = 2000));

	// テーブル名
	strDefault.Format( _T("")	   ) ; def = (TCHAR *)(LPCTSTR)strDefault;
	IniFile.AccessProfile( eAccessFlag, sec, _T("DBTableName")	, &(tpDst->szTableName) , DATA_ATTR_STRING, def ) ;

	// CSV行No
	IniFile.AccessProfile( eAccessFlag, sec, _T("CsvSingleDataRow")	, &(tpDst->nCsvSingleRowNo) , DATA_ATTR_INT32, &(nDefault=1) ) ;	// 単票行No
	IniFile.AccessProfile( eAccessFlag, sec, _T("CsvReportDataRow")	, &(tpDst->nCsvReportRowNo) , DATA_ATTR_INT32, &(nDefault=1) ) ;	// 帳票行No

	//*** 個別データ（テーブル列名、CSV列No）
	switch( nCollectIndex )
	{
		// マイニングデータ設定
		case COLLECT_MINING :
		{
			// ファイル識別
			IniFile.AccessProfile(eAccessFlag, sec, _T("FileName"), &(tpDst->szFileName), DATA_ATTR_STRING, _T("VP"));

			// データフォルダパスサブ
			strDefault.Format( _T("%s"), AbsPath(TMP_PATH) ); def = (TCHAR *)(LPCTSTR)strDefault;
			IniFile.AccessProfile( eAccessFlag, sec, _T("DataPathSub1")		, &(tpDst->szDataPathSub1)	, DATA_ATTR_STRING, def ) ;
			IniFile.AccessProfile( eAccessFlag, sec, _T("DataPathSub2")		, &(tpDst->szDataPathSub2)	, DATA_ATTR_STRING, def ) ;
			IniFile.AccessProfile( eAccessFlag, sec, _T("DataPathSub3")		, &(tpDst->szDataPathSub3)	, DATA_ATTR_STRING, def ) ;
			IniFile.AccessProfile( eAccessFlag, sec, _T("DataPathSub4")		, &(tpDst->szDataPathSub4)	, DATA_ATTR_STRING, def ) ;
			IniFile.AccessProfile( eAccessFlag, sec, _T("DataPathSub5")		, &(tpDst->szDataPathSub5)	, DATA_ATTR_STRING, def ) ;

			// テーブル列名
			strSection.Format( _T("TableColName") ) ; sec = (TCHAR *)(LPCTSTR)strSection;
			strDefault.Format( _T("")			  ) ; def = (TCHAR *)(LPCTSTR)strDefault;
			IniFile.AccessProfile( eAccessFlag, sec, _T("WorkId")		, &(tpDst->tpTableCol[MINING_WORKID		].szName), DATA_ATTR_STRING, def ) ;	// ワークID
			IniFile.AccessProfile( eAccessFlag, sec, _T("DateTime")		, &(tpDst->tpTableCol[MINING_DATETIME	].szName), DATA_ATTR_STRING, def ) ;	// 計測日時
			IniFile.AccessProfile( eAccessFlag, sec, _T("OpNo")			, &(tpDst->tpTableCol[MINING_OPNO		].szName), DATA_ATTR_STRING, def ) ;	// OP番号
			IniFile.AccessProfile( eAccessFlag, sec, _T("ONo")			, &(tpDst->tpTableCol[MINING_ONO		].szName), DATA_ATTR_STRING, def ) ;	// O番号
			IniFile.AccessProfile( eAccessFlag, sec, _T("ToolNo")		, &(tpDst->tpTableCol[MINING_TOOLNO		].szName), DATA_ATTR_STRING, def ) ;	// ツール番号
			IniFile.AccessProfile( eAccessFlag, sec, _T("ToolId")		, &(tpDst->tpTableCol[MINING_TOOLID		].szName), DATA_ATTR_STRING, def ) ;	// ツール背番号
			IniFile.AccessProfile( eAccessFlag, sec, _T("ToolCount")	, &(tpDst->tpTableCol[MINING_TOOLCOUNT	].szName), DATA_ATTR_STRING, def ) ;	// ツール加工回数
			IniFile.AccessProfile( eAccessFlag, sec, _T("Judge")		, &(tpDst->tpTableCol[MINING_JUDGE		].szName), DATA_ATTR_STRING, def ) ;	// 判定
			IniFile.AccessProfile( eAccessFlag, sec, _T("Value")		, &(tpDst->tpTableCol[MINING_VALUE		].szName), DATA_ATTR_STRING, def ) ;	// 計測値
			IniFile.AccessProfile( eAccessFlag, sec, _T("ThresholdMax")	, &(tpDst->tpTableCol[MINING_MAX		].szName), DATA_ATTR_STRING, def ) ;	// 計測値上限
			IniFile.AccessProfile( eAccessFlag, sec, _T("Breakage")		, &(tpDst->tpTableCol[MINING_BREAKAGE	].szName), DATA_ATTR_STRING, def ) ;	// 折損前検知フラグ
			IniFile.AccessProfile( eAccessFlag, sec, _T("LineId")		, &(tpDst->tpTableCol[MINING_LINEID		].szName), DATA_ATTR_STRING, def ) ;	// ラインID
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNameIpAddress"), &(tpDst->tpTableCol[MINING_IPADDRESS].szName), DATA_ATTR_STRING, def) ;	// IPアドレスカラム名
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNameModelName"), &(tpDst->tpTableCol[MINING_MODELNAME].szName), DATA_ATTR_STRING, def) ;	// 加工機名カラム名
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNameFeatureType"), &(tpDst->tpTableCol[MINING_FEATURETYPE].szName), DATA_ATTR_STRING, def);	// KOMTAS Viewer機能選択カラム名
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNameNcLoggerFileName"), &(tpDst->tpTableCol[MINING_NCLOGGER_FILENAME].szName), DATA_ATTR_STRING, def);	// 生データファイル名

			// 項目診断ごとの項目
			for( INT32 i = 0 ; i < NOF_JUDGE_ITEM_RANK ; i++ ){
				nColOffset = i * ( MINING_IMP2_SENSOR - MINING_IMP1_SENSOR ) ;
				// データ項目
				strKey.Format( _T("Impact%dDataNo"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->tpTableCol[MINING_IMP1_SENSOR  + nColOffset].szName), DATA_ATTR_STRING, def ) ;

				// 特徴量番号
				strKey.Format( _T("Impact%dFeature"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->tpTableCol[MINING_IMP1_FEATURE + nColOffset].szName), DATA_ATTR_STRING, def ) ;
	
				// 診断値
				strKey.Format( _T("Impact%dValue"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->tpTableCol[MINING_IMP1_VALUE   + nColOffset].szName) , DATA_ATTR_STRING, def ) ;

			}

			// CSV列No
			strSection.Format( _T("CsvColNo") ) ; sec = (TCHAR *)(LPCTSTR)strSection;
			IniFile.AccessProfile( eAccessFlag, sec, _T("WorkId")		, &(tpDst->pnCsvColNo[MINING_WORKID		]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// ワークID
			IniFile.AccessProfile( eAccessFlag, sec, _T("DateTime")		, &(tpDst->pnCsvColNo[MINING_DATETIME	]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// 計測日時
			IniFile.AccessProfile( eAccessFlag, sec, _T("OpNo")			, &(tpDst->pnCsvColNo[MINING_OPNO		]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// OP番号
			IniFile.AccessProfile( eAccessFlag, sec, _T("ONo")			, &(tpDst->pnCsvColNo[MINING_ONO		]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// O番号
			IniFile.AccessProfile( eAccessFlag, sec, _T("ToolNo")		, &(tpDst->pnCsvColNo[MINING_TOOLNO		]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// ツール番号
			IniFile.AccessProfile( eAccessFlag, sec, _T("ToolId")		, &(tpDst->pnCsvColNo[MINING_TOOLID		]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// ツール背番号
			IniFile.AccessProfile( eAccessFlag, sec, _T("ToolCount")	, &(tpDst->pnCsvColNo[MINING_TOOLCOUNT	]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// ツール加工回数
			IniFile.AccessProfile( eAccessFlag, sec, _T("Judge")		, &(tpDst->pnCsvColNo[MINING_JUDGE		]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// 判定
			IniFile.AccessProfile( eAccessFlag, sec, _T("Value")		, &(tpDst->pnCsvColNo[MINING_VALUE		]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// 計測値
			IniFile.AccessProfile( eAccessFlag, sec, _T("ThresholdMax")	, &(tpDst->pnCsvColNo[MINING_MAX		]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// 計測値上限
			IniFile.AccessProfile( eAccessFlag, sec, _T("Breakage")		, &(tpDst->pnCsvColNo[MINING_BREAKAGE	]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// 折損前検知フラグ
			IniFile.AccessProfile( eAccessFlag, sec, _T("LineId")		, &(tpDst->pnCsvColNo[MINING_LINEID		]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// ラインID
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNoIpAddress"), &(tpDst->pnCsvColNo[MINING_IPADDRESS]), DATA_ATTR_INT32, &(nDefault = 29)) ;	// IPアドレス列番号
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNoModelName"), &(tpDst->pnCsvColNo[MINING_MODELNAME]), DATA_ATTR_INT32, &(nDefault = 30)) ;	// 加工機名列番号
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNoFeatureType"), &(tpDst->pnCsvColNo[MINING_FEATURETYPE]), DATA_ATTR_INT32, &(nDefault = 31)) ;	// KOMTAS Viewer機能選択列番号
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNoNcLoggerFileName"), &(tpDst->pnCsvColNo[MINING_NCLOGGER_FILENAME]), DATA_ATTR_INT32, &(nDefault = 1));	// 生データファイル名
			
			// 項目診断ごとの項目
			for( INT32 i = 0 ; i < NOF_JUDGE_ITEM_RANK ; i++ ){
				nColOffset = i * ( MINING_IMP2_SENSOR - MINING_IMP1_SENSOR ) ;
				// データ項目
				strKey.Format( _T("Impact%dDataNo"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->pnCsvColNo[MINING_IMP1_SENSOR  + nColOffset]), DATA_ATTR_INT32, &(nDefault=1) ) ;

				// 特徴量番号
				strKey.Format( _T("Impact%dFeature"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->pnCsvColNo[MINING_IMP1_FEATURE + nColOffset]), DATA_ATTR_INT32, &(nDefault=1) ) ;
	
				// 診断値
				strKey.Format( _T("Impact%dValue"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->pnCsvColNo[MINING_IMP1_VALUE   + nColOffset]) , DATA_ATTR_INT32, &(nDefault=1) ) ;

			}

			break ;
		}

		// 設定１データ設定
		case COLLECT_SETTING1 :
		{
			// ファイル識別
			IniFile.AccessProfile(eAccessFlag, sec, _T("FileName"), &(tpDst->szFileName), DATA_ATTR_STRING, _T("Score"));

			// テーブル列名
			strSection.Format( _T("TableColName") ) ; sec = (TCHAR *)(LPCTSTR)strSection;
			strDefault.Format( _T("")			  ) ; def = (TCHAR *)(LPCTSTR)strDefault;
			IniFile.AccessProfile( eAccessFlag, sec, _T("WorkId")			, &(tpDst->tpTableCol[SETTING1_WORKID			].szName), DATA_ATTR_STRING, def ) ;	// ワークID
			IniFile.AccessProfile( eAccessFlag, sec, _T("DateTime")			, &(tpDst->tpTableCol[SETTING1_DATETIME			].szName), DATA_ATTR_STRING, def ) ;	// 計測日時
			IniFile.AccessProfile( eAccessFlag, sec, _T("OpNo")				, &(tpDst->tpTableCol[SETTING1_OPNO				].szName), DATA_ATTR_STRING, def ) ;	// OP番号
			IniFile.AccessProfile( eAccessFlag, sec, _T("MeasureItem")		, &(tpDst->tpTableCol[SETTING1_MESITEM			].szName), DATA_ATTR_STRING, def ) ;	// 計測項目
			IniFile.AccessProfile( eAccessFlag, sec, _T("MeasureItemName")	, &(tpDst->tpTableCol[SETTING1_MESITEM_NAME		].szName), DATA_ATTR_STRING, def ) ;	// 計測項目名称
			IniFile.AccessProfile( eAccessFlag, sec, _T("NgBit")			, &(tpDst->tpTableCol[SETTING1_NGBIT				].szName), DATA_ATTR_STRING, def ) ;	// NGビット
			IniFile.AccessProfile( eAccessFlag, sec, _T("ResultId")			, &(tpDst->tpTableCol[SETTING1_RESULTID			].szName), DATA_ATTR_STRING, def ) ;	// 結果ID
			IniFile.AccessProfile( eAccessFlag, sec, _T("DataItem")			, &(tpDst->tpTableCol[SETTING1_DATAITEM			].szName), DATA_ATTR_STRING, def ) ;	// データ項目
			IniFile.AccessProfile( eAccessFlag, sec, _T("CncNo")			, &(tpDst->tpTableCol[SETTING1_CNC_NO			].szName), DATA_ATTR_STRING, def ) ;	// CNC No
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNameIpAddress") , &(tpDst->tpTableCol[SETTING1_IPADDRESS		].szName), DATA_ATTR_STRING, def ) ;	// IPアドレスカラム名
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNameModelName") , &(tpDst->tpTableCol[SETTING1_MODELNAME		].szName), DATA_ATTR_STRING, def ) ;	// 加工機名カラム名
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNameFeatureType"), &(tpDst->tpTableCol[SETTING1_FEATURETYPE		].szName), DATA_ATTR_STRING, def ) ;	// KOMTAS Viewer機能選択カラム名
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNameNcLoggerFileName")	, &(tpDst->tpTableCol[SETTING1_NCLOGGER_FILENAME].szName), DATA_ATTR_STRING, def );	// 生データファイル名
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNameToolNo")	, &(tpDst->tpTableCol[SETTING1_TOOLNO			].szName), DATA_ATTR_STRING, def ) ;	// 工具番号

			// 特徴量ごとの項目
			for( INT32 i = 0 ; i < NOF_MES_FEATURE ; i++ ){
				nColOffset = i * ( SETTING1_FEATURE2_ENABLE - SETTING1_FEATURE1_ENABLE ) ;
				// 有効
				strKey.Format( _T("Feature%dEnable"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->tpTableCol[SETTING1_FEATURE1_ENABLE + nColOffset].szName), DATA_ATTR_STRING, def ) ;

				// 名称
				strKey.Format( _T("Feature%dName"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->tpTableCol[SETTING1_FEATURE1_NAME + nColOffset].szName), DATA_ATTR_STRING, def ) ;
	
				// 判定
				strKey.Format( _T("Feature%dJudge"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->tpTableCol[SETTING1_FEATURE1_JUDGE + nColOffset].szName) , DATA_ATTR_STRING, def ) ;

				// 判定種類
				strKey.Format( _T("Feature%dJudgeKind"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->tpTableCol[SETTING1_FEATURE1_JDGKIND + nColOffset].szName) , DATA_ATTR_STRING, def ) ;

				// 計測値
				strKey.Format( _T("Feature%dValue"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->tpTableCol[SETTING1_FEATURE1_VALUE + nColOffset].szName) , DATA_ATTR_STRING, def ) ;

				// 計測値下限
				strKey.Format( _T("Feature%dMin"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->tpTableCol[SETTING1_FEATURE1_MIN + nColOffset].szName) , DATA_ATTR_STRING, def ) ;

				// 計測値上限
				strKey.Format( _T("Feature%dMax"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->tpTableCol[SETTING1_FEATURE1_MAX + nColOffset].szName) , DATA_ATTR_STRING, def ) ;

			}

			// CSV列No
			strSection.Format( _T("CsvColNo") ) ; sec = (TCHAR *)(LPCTSTR)strSection;
			IniFile.AccessProfile( eAccessFlag, sec, _T("WorkId")			, &(tpDst->pnCsvColNo[SETTING1_WORKID			]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// ワークID
			IniFile.AccessProfile( eAccessFlag, sec, _T("DateTime")			, &(tpDst->pnCsvColNo[SETTING1_DATETIME			]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// 計測日時
			IniFile.AccessProfile( eAccessFlag, sec, _T("OpNo")				, &(tpDst->pnCsvColNo[SETTING1_OPNO				]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// OP番号
			IniFile.AccessProfile( eAccessFlag, sec, _T("MeasureItem")		, &(tpDst->pnCsvColNo[SETTING1_MESITEM			]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// 計測項目
			IniFile.AccessProfile( eAccessFlag, sec, _T("MeasureItemName")	, &(tpDst->pnCsvColNo[SETTING1_MESITEM_NAME		]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// 計測項目名称
			IniFile.AccessProfile( eAccessFlag, sec, _T("NgBit")			, &(tpDst->pnCsvColNo[SETTING1_NGBIT				]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// NGビット
			IniFile.AccessProfile( eAccessFlag, sec, _T("ResultId")			, &(tpDst->pnCsvColNo[SETTING1_RESULTID			]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// 結果ID
			IniFile.AccessProfile( eAccessFlag, sec, _T("DataItem")			, &(tpDst->pnCsvColNo[SETTING1_DATAITEM			]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// データ項目
			IniFile.AccessProfile( eAccessFlag, sec, _T("CncNo")			, &(tpDst->pnCsvColNo[SETTING1_CNC_NO			]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// CNC No
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNoIpAddress")	, &(tpDst->pnCsvColNo[SETTING1_IPADDRESS		]), DATA_ATTR_INT32, &(nDefault = 32));	// IPアドレス列番号
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNoModelName")	, &(tpDst->pnCsvColNo[SETTING1_MODELNAME		]), DATA_ATTR_INT32, &(nDefault = 33));	// 加工機名列番号
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNoFeatureType")	, &(tpDst->pnCsvColNo[SETTING1_FEATURETYPE		]), DATA_ATTR_INT32, &(nDefault = 34));	// KOMTAS Viewer機能選択列番号
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNoNcLoggerFileName")	, &(tpDst->pnCsvColNo[SETTING1_NCLOGGER_FILENAME]), DATA_ATTR_INT32, &(nDefault=1) );	// 生データファイル名
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNoToolNo")		, &(tpDst->pnCsvColNo[SETTING1_TOOLNO			]), DATA_ATTR_INT32, &(nDefault = 35));	// 工具番号

			// 特徴量ごとの項目
			for( INT32 i = 0 ; i < NOF_MES_FEATURE ; i++ ){
				nColOffset = i * ( SETTING1_FEATURE2_ENABLE - SETTING1_FEATURE1_ENABLE ) ;
				// 有効
				strKey.Format( _T("Feature%dEnable"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->pnCsvColNo[SETTING1_FEATURE1_ENABLE + nColOffset]), DATA_ATTR_INT32, &(nDefault=1 ) ) ;

				// 名称
				strKey.Format( _T("Feature%dName"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->pnCsvColNo[SETTING1_FEATURE1_NAME + nColOffset]), DATA_ATTR_INT32, &(nDefault=1 ) ) ;
	
				// 判定
				strKey.Format( _T("Feature%dJudge"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->pnCsvColNo[SETTING1_FEATURE1_JUDGE + nColOffset]) , DATA_ATTR_INT32, &(nDefault=1 ) ) ;

				// 判定種類
				strKey.Format( _T("Feature%dJudgeKind"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->pnCsvColNo[SETTING1_FEATURE1_JDGKIND + nColOffset]) , DATA_ATTR_INT32, &(nDefault=1 ) ) ;

				// 計測値
				strKey.Format( _T("Feature%dValue"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->pnCsvColNo[SETTING1_FEATURE1_VALUE + nColOffset]) , DATA_ATTR_INT32, &(nDefault=1 ) ) ;

				// 計測値下限
				strKey.Format( _T("Feature%dMin"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->pnCsvColNo[SETTING1_FEATURE1_MIN + nColOffset]) , DATA_ATTR_INT32, &(nDefault=1 ) ) ;

				// 計測値上限
				strKey.Format( _T("Feature%dMax"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->pnCsvColNo[SETTING1_FEATURE1_MAX + nColOffset]) , DATA_ATTR_INT32, &(nDefault=1 ) ) ;

			}

			break ;
		}

		// 設定２データ設定
		case COLLECT_SETTING2 :
		{
			// ファイル識別
			IniFile.AccessProfile(eAccessFlag, sec, _T("FileName"), &(tpDst->szFileName), DATA_ATTR_STRING, _T("Score"));

			// テーブル列名
			strSection.Format( _T("TableColName") ) ; sec = (TCHAR *)(LPCTSTR)strSection;
			strDefault.Format( _T("")			  ) ; def = (TCHAR *)(LPCTSTR)strDefault;
			IniFile.AccessProfile( eAccessFlag, sec, _T("WorkId")			, &(tpDst->tpTableCol[SETTING2_WORKID			].szName), DATA_ATTR_STRING, def ) ;	// ワークID
			IniFile.AccessProfile( eAccessFlag, sec, _T("DateTime")			, &(tpDst->tpTableCol[SETTING2_DATETIME			].szName), DATA_ATTR_STRING, def ) ;	// 計測日時
			IniFile.AccessProfile( eAccessFlag, sec, _T("OpNo")				, &(tpDst->tpTableCol[SETTING2_OPNO				].szName), DATA_ATTR_STRING, def ) ;	// OP番号
			IniFile.AccessProfile( eAccessFlag, sec, _T("MeasureItem")		, &(tpDst->tpTableCol[SETTING2_MESITEM			].szName), DATA_ATTR_STRING, def ) ;	// 計測項目
			IniFile.AccessProfile( eAccessFlag, sec, _T("MeasureItemName")	, &(tpDst->tpTableCol[SETTING2_MESITEM_NAME		].szName), DATA_ATTR_STRING, def ) ;	// 計測項目名称
			IniFile.AccessProfile( eAccessFlag, sec, _T("NgBit")			, &(tpDst->tpTableCol[SETTING2_NGBIT				].szName), DATA_ATTR_STRING, def ) ;	// NGビット
			IniFile.AccessProfile( eAccessFlag, sec, _T("ResultId")			, &(tpDst->tpTableCol[SETTING2_RESULTID			].szName), DATA_ATTR_STRING, def ) ;	// 結果ID
			IniFile.AccessProfile( eAccessFlag, sec, _T("DataItem")			, &(tpDst->tpTableCol[SETTING2_DATAITEM			].szName), DATA_ATTR_STRING, def ) ;	// データ項目
			IniFile.AccessProfile( eAccessFlag, sec, _T("CncNo")			, &(tpDst->tpTableCol[SETTING2_CNC_NO			].szName), DATA_ATTR_STRING, def ) ;	// CNC No
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNameIpAddress")	, &(tpDst->tpTableCol[SETTING2_IPADDRESS		].szName), DATA_ATTR_STRING, def ) ;	// IPアドレスカラム名
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNameModelName")	, &(tpDst->tpTableCol[SETTING2_MODELNAME		].szName), DATA_ATTR_STRING, def ) ;	// 加工機名カラム名
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNameFeatureType"), &(tpDst->tpTableCol[SETTING2_FEATURETYPE		].szName), DATA_ATTR_STRING, def ) ;	// KOMTAS Viewer機能選択カラム名
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNameNcLoggerFileName")	, &(tpDst->tpTableCol[SETTING2_NCLOGGER_FILENAME].szName), DATA_ATTR_STRING, def ) ;	// 生データファイル名
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNameToolNo")	, &(tpDst->tpTableCol[SETTING2_TOOLNO			].szName), DATA_ATTR_STRING, def ) ;	// 工具番号

			// 特徴量ごとの項目
			for( INT32 i = 0 ; i < NOF_MES_FEATURE ; i++ ){
				nColOffset = i * ( SETTING2_FEATURE2_ENABLE - SETTING2_FEATURE1_ENABLE ) ;
				// 有効
				strKey.Format( _T("Feature%dEnable"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->tpTableCol[SETTING2_FEATURE1_ENABLE + nColOffset].szName), DATA_ATTR_STRING, def ) ;

				// 名称
				strKey.Format( _T("Feature%dName"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->tpTableCol[SETTING2_FEATURE1_NAME + nColOffset].szName), DATA_ATTR_STRING, def ) ;
	
				// 判定
				strKey.Format( _T("Feature%dJudge"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->tpTableCol[SETTING2_FEATURE1_JUDGE + nColOffset].szName) , DATA_ATTR_STRING, def ) ;

				// 判定種類
				strKey.Format( _T("Feature%dJudgeKind"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->tpTableCol[SETTING2_FEATURE1_JDGKIND + nColOffset].szName) , DATA_ATTR_STRING, def ) ;

				// 計測値
				strKey.Format( _T("Feature%dValue"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->tpTableCol[SETTING2_FEATURE1_VALUE + nColOffset].szName) , DATA_ATTR_STRING, def ) ;

				// 計測値下限
				strKey.Format( _T("Feature%dMin"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->tpTableCol[SETTING2_FEATURE1_MIN + nColOffset].szName) , DATA_ATTR_STRING, def ) ;

				// 計測値上限
				strKey.Format( _T("Feature%dMax"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->tpTableCol[SETTING2_FEATURE1_MAX + nColOffset].szName) , DATA_ATTR_STRING, def ) ;

			}

			// CSV列No
			strSection.Format( _T("CsvColNo") ) ; sec = (TCHAR *)(LPCTSTR)strSection;
			IniFile.AccessProfile( eAccessFlag, sec, _T("WorkId")			, &(tpDst->pnCsvColNo[SETTING2_WORKID			]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// ワークID
			IniFile.AccessProfile( eAccessFlag, sec, _T("DateTime")			, &(tpDst->pnCsvColNo[SETTING2_DATETIME			]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// 計測日時
			IniFile.AccessProfile( eAccessFlag, sec, _T("OpNo")				, &(tpDst->pnCsvColNo[SETTING2_OPNO				]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// OP番号
			IniFile.AccessProfile( eAccessFlag, sec, _T("MeasureItem")		, &(tpDst->pnCsvColNo[SETTING2_MESITEM			]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// 計測項目
			IniFile.AccessProfile( eAccessFlag, sec, _T("MeasureItemName")	, &(tpDst->pnCsvColNo[SETTING2_MESITEM_NAME		]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// 計測項目名称
			IniFile.AccessProfile( eAccessFlag, sec, _T("NgBit")			, &(tpDst->pnCsvColNo[SETTING2_NGBIT			]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// NGビット
			IniFile.AccessProfile( eAccessFlag, sec, _T("ResultId")			, &(tpDst->pnCsvColNo[SETTING2_RESULTID			]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// 結果ID
			IniFile.AccessProfile( eAccessFlag, sec, _T("DataItem")			, &(tpDst->pnCsvColNo[SETTING2_DATAITEM			]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// データ項目
			IniFile.AccessProfile( eAccessFlag, sec, _T("CncNo")			, &(tpDst->pnCsvColNo[SETTING2_CNC_NO			]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// CNC No
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNoIpAddress")	, &(tpDst->pnCsvColNo[SETTING2_IPADDRESS		]), DATA_ATTR_INT32, &(nDefault = 32));	// IPアドレス列番号
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNoModelName")	, &(tpDst->pnCsvColNo[SETTING2_MODELNAME		]), DATA_ATTR_INT32, &(nDefault = 33));	// 加工機名列番号
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNoFeatureType")	, &(tpDst->pnCsvColNo[SETTING2_FEATURETYPE		]), DATA_ATTR_INT32, &(nDefault = 34));	// KOMTAS Viewer機能選択列番号
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNoNcLoggerFileName")	, &(tpDst->pnCsvColNo[SETTING2_NCLOGGER_FILENAME]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// 生データファイル名
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNoToolNo")		, &(tpDst->pnCsvColNo[SETTING2_TOOLNO			]), DATA_ATTR_INT32, &(nDefault = 35));	// 工具番号

			// 特徴量ごとの項目
			for( INT32 i = 0 ; i < NOF_MES_FEATURE ; i++ ){
				nColOffset = i * ( SETTING2_FEATURE2_ENABLE - SETTING2_FEATURE1_ENABLE ) ;
				// 有効
				strKey.Format( _T("Feature%dEnable"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->pnCsvColNo[SETTING2_FEATURE1_ENABLE + nColOffset]), DATA_ATTR_INT32, &(nDefault=1 ) ) ;

				// 名称
				strKey.Format( _T("Feature%dName"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->pnCsvColNo[SETTING2_FEATURE1_NAME + nColOffset]), DATA_ATTR_INT32, &(nDefault=1 ) ) ;
	
				// 判定
				strKey.Format( _T("Feature%dJudge"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->pnCsvColNo[SETTING2_FEATURE1_JUDGE + nColOffset]) , DATA_ATTR_INT32, &(nDefault=1 ) ) ;

				// 判定種類
				strKey.Format( _T("Feature%dJudgeKind"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->pnCsvColNo[SETTING2_FEATURE1_JDGKIND + nColOffset]) , DATA_ATTR_INT32, &(nDefault=1 ) ) ;

				// 計測値
				strKey.Format( _T("Feature%dValue"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->pnCsvColNo[SETTING2_FEATURE1_VALUE + nColOffset]) , DATA_ATTR_INT32, &(nDefault=1 ) ) ;

				// 計測値下限
				strKey.Format( _T("Feature%dMin"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->pnCsvColNo[SETTING2_FEATURE1_MIN + nColOffset]) , DATA_ATTR_INT32, &(nDefault=1 ) ) ;

				// 計測値上限
				strKey.Format( _T("Feature%dMax"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->pnCsvColNo[SETTING2_FEATURE1_MAX + nColOffset]) , DATA_ATTR_INT32, &(nDefault=1 ) ) ;

			}

			break ;
		}

		// 設定３データ設定
		case COLLECT_SETTING3 :
		{
			// ファイル識別
			IniFile.AccessProfile(eAccessFlag, sec, _T("FileName"), &(tpDst->szFileName), DATA_ATTR_STRING, _T("Score"));

			// テーブル列名
			strSection.Format( _T("TableColName") ) ; sec = (TCHAR *)(LPCTSTR)strSection;
			strDefault.Format( _T("")			  ) ; def = (TCHAR *)(LPCTSTR)strDefault;
			IniFile.AccessProfile( eAccessFlag, sec, _T("WorkId")			, &(tpDst->tpTableCol[SETTING3_WORKID			].szName), DATA_ATTR_STRING, def ) ;	// ワークID
			IniFile.AccessProfile( eAccessFlag, sec, _T("DateTime")			, &(tpDst->tpTableCol[SETTING3_DATETIME			].szName), DATA_ATTR_STRING, def ) ;	// 計測日時
			IniFile.AccessProfile( eAccessFlag, sec, _T("OpNo")				, &(tpDst->tpTableCol[SETTING3_OPNO				].szName), DATA_ATTR_STRING, def ) ;	// OP番号
			IniFile.AccessProfile( eAccessFlag, sec, _T("MeasureItem")		, &(tpDst->tpTableCol[SETTING3_MESITEM			].szName), DATA_ATTR_STRING, def ) ;	// 計測項目
			IniFile.AccessProfile( eAccessFlag, sec, _T("MeasureItemName")	, &(tpDst->tpTableCol[SETTING3_MESITEM_NAME		].szName), DATA_ATTR_STRING, def ) ;	// 計測項目名称
			IniFile.AccessProfile( eAccessFlag, sec, _T("NgBit")			, &(tpDst->tpTableCol[SETTING3_NGBIT			].szName), DATA_ATTR_STRING, def ) ;	// NGビット
			IniFile.AccessProfile( eAccessFlag, sec, _T("ResultId")			, &(tpDst->tpTableCol[SETTING3_RESULTID			].szName), DATA_ATTR_STRING, def ) ;	// 結果ID
			IniFile.AccessProfile( eAccessFlag, sec, _T("DataItem")			, &(tpDst->tpTableCol[SETTING3_DATAITEM			].szName), DATA_ATTR_STRING, def ) ;	// データ項目
			IniFile.AccessProfile( eAccessFlag, sec, _T("CncNo")			, &(tpDst->tpTableCol[SETTING3_CNC_NO			].szName), DATA_ATTR_STRING, def ) ;	// CNC No
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNameIpAddress")	, &(tpDst->tpTableCol[SETTING3_IPADDRESS		].szName), DATA_ATTR_STRING, def);	// IPアドレスカラム名
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNameModelName")	, &(tpDst->tpTableCol[SETTING3_MODELNAME		].szName), DATA_ATTR_STRING, def);	// 加工機名カラム名
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNameFeatureType"), &(tpDst->tpTableCol[SETTING3_FEATURETYPE		].szName), DATA_ATTR_STRING, def);	// KOMTAS Viewer機能選択カラム名
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNameNcLoggerFileName")	, &(tpDst->tpTableCol[SETTING3_NCLOGGER_FILENAME].szName), DATA_ATTR_STRING, def ) ;	// 生データファイル名
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNameToolNo")	, &(tpDst->tpTableCol[SETTING3_TOOLNO			].szName), DATA_ATTR_STRING, def ) ;	// 工具番号

			// 特徴量ごとの項目
			for( INT32 i = 0 ; i < NOF_MES_FEATURE ; i++ ){
				nColOffset = i * ( SETTING3_FEATURE2_ENABLE - SETTING3_FEATURE1_ENABLE ) ;
				// 有効
				strKey.Format( _T("Feature%dEnable"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->tpTableCol[SETTING3_FEATURE1_ENABLE + nColOffset].szName), DATA_ATTR_STRING, def ) ;

				// 名称
				strKey.Format( _T("Feature%dName"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->tpTableCol[SETTING3_FEATURE1_NAME + nColOffset].szName), DATA_ATTR_STRING, def ) ;
	
				// 判定
				strKey.Format( _T("Feature%dJudge"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->tpTableCol[SETTING3_FEATURE1_JUDGE + nColOffset].szName) , DATA_ATTR_STRING, def ) ;

				// 判定種類
				strKey.Format( _T("Feature%dJudgeKind"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->tpTableCol[SETTING3_FEATURE1_JDGKIND + nColOffset].szName) , DATA_ATTR_STRING, def ) ;

				// 計測値
				strKey.Format( _T("Feature%dValue"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->tpTableCol[SETTING3_FEATURE1_VALUE + nColOffset].szName) , DATA_ATTR_STRING, def ) ;

				// 計測値下限
				strKey.Format( _T("Feature%dMin"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->tpTableCol[SETTING3_FEATURE1_MIN + nColOffset].szName) , DATA_ATTR_STRING, def ) ;

				// 計測値上限
				strKey.Format( _T("Feature%dMax"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->tpTableCol[SETTING3_FEATURE1_MAX + nColOffset].szName) , DATA_ATTR_STRING, def ) ;

			}

			// CSV列No
			strSection.Format( _T("CsvColNo") ) ; sec = (TCHAR *)(LPCTSTR)strSection;
			IniFile.AccessProfile( eAccessFlag, sec, _T("WorkId")			, &(tpDst->pnCsvColNo[SETTING3_WORKID			]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// ワークID
			IniFile.AccessProfile( eAccessFlag, sec, _T("DateTime")			, &(tpDst->pnCsvColNo[SETTING3_DATETIME			]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// 計測日時
			IniFile.AccessProfile( eAccessFlag, sec, _T("OpNo")				, &(tpDst->pnCsvColNo[SETTING3_OPNO				]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// OP番号
			IniFile.AccessProfile( eAccessFlag, sec, _T("MeasureItem")		, &(tpDst->pnCsvColNo[SETTING3_MESITEM			]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// 計測項目
			IniFile.AccessProfile( eAccessFlag, sec, _T("MeasureItemName")	, &(tpDst->pnCsvColNo[SETTING3_MESITEM_NAME		]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// 計測項目名称
			IniFile.AccessProfile( eAccessFlag, sec, _T("NgBit")			, &(tpDst->pnCsvColNo[SETTING3_NGBIT			]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// NGビット
			IniFile.AccessProfile( eAccessFlag, sec, _T("ResultId")			, &(tpDst->pnCsvColNo[SETTING3_RESULTID			]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// 結果ID
			IniFile.AccessProfile( eAccessFlag, sec, _T("DataItem")			, &(tpDst->pnCsvColNo[SETTING3_DATAITEM			]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// データ項目
			IniFile.AccessProfile( eAccessFlag, sec, _T("CncNo")			, &(tpDst->pnCsvColNo[SETTING3_CNC_NO			]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// CNC No
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNoIpAddress")	, &(tpDst->pnCsvColNo[SETTING3_IPADDRESS		]), DATA_ATTR_INT32, &(nDefault = 32));	// IPアドレス列番号
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNoModelName")	, &(tpDst->pnCsvColNo[SETTING3_MODELNAME		]), DATA_ATTR_INT32, &(nDefault = 33));	// 加工機名列番号
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNoFeatureType")	, &(tpDst->pnCsvColNo[SETTING3_FEATURETYPE		]), DATA_ATTR_INT32, &(nDefault = 34));	// KOMTAS Viewer機能選択列番号
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNoNcLoggerFileName")	, &(tpDst->pnCsvColNo[SETTING3_NCLOGGER_FILENAME]), DATA_ATTR_INT32, &(nDefault = 1));	// 生データファイル名
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNoToolNo")		, &(tpDst->pnCsvColNo[SETTING3_TOOLNO			]), DATA_ATTR_INT32, &(nDefault = 35));	// 工具番号

			// 特徴量ごとの項目
			for( INT32 i = 0 ; i < NOF_MES_FEATURE ; i++ ){
				nColOffset = i * ( SETTING3_FEATURE2_ENABLE - SETTING3_FEATURE1_ENABLE ) ;
				// 有効
				strKey.Format( _T("Feature%dEnable"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->pnCsvColNo[SETTING3_FEATURE1_ENABLE + nColOffset]), DATA_ATTR_INT32, &(nDefault=1 ) ) ;

				// 名称
				strKey.Format( _T("Feature%dName"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->pnCsvColNo[SETTING3_FEATURE1_NAME + nColOffset]), DATA_ATTR_INT32, &(nDefault=1 ) ) ;
	
				// 判定
				strKey.Format( _T("Feature%dJudge"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->pnCsvColNo[SETTING3_FEATURE1_JUDGE + nColOffset]) , DATA_ATTR_INT32, &(nDefault=1 ) ) ;

				// 判定種類
				strKey.Format( _T("Feature%dJudgeKind"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->pnCsvColNo[SETTING3_FEATURE1_JDGKIND + nColOffset]) , DATA_ATTR_INT32, &(nDefault=1 ) ) ;

				// 計測値
				strKey.Format( _T("Feature%dValue"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->pnCsvColNo[SETTING3_FEATURE1_VALUE + nColOffset]) , DATA_ATTR_INT32, &(nDefault=1 ) ) ;

				// 計測値下限
				strKey.Format( _T("Feature%dMin"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->pnCsvColNo[SETTING3_FEATURE1_MIN + nColOffset]) , DATA_ATTR_INT32, &(nDefault=1 ) ) ;

				// 計測値上限
				strKey.Format( _T("Feature%dMax"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->pnCsvColNo[SETTING3_FEATURE1_MAX + nColOffset]) , DATA_ATTR_INT32, &(nDefault=1 ) ) ;

			}

			break ;
		}

		// 設定４データ設定
		case COLLECT_SETTING4 :
		{
			// ファイル識別
			IniFile.AccessProfile(eAccessFlag, sec, _T("FileName"), &(tpDst->szFileName), DATA_ATTR_STRING, _T("Score"));

			// テーブル列名
			strSection.Format( _T("TableColName") ) ; sec = (TCHAR *)(LPCTSTR)strSection;
			strDefault.Format( _T("")			  ) ; def = (TCHAR *)(LPCTSTR)strDefault;
			IniFile.AccessProfile( eAccessFlag, sec, _T("WorkId")			, &(tpDst->tpTableCol[SETTING4_WORKID			].szName), DATA_ATTR_STRING, def ) ;	// ワークID
			IniFile.AccessProfile( eAccessFlag, sec, _T("DateTime")			, &(tpDst->tpTableCol[SETTING4_DATETIME			].szName), DATA_ATTR_STRING, def ) ;	// 計測日時
			IniFile.AccessProfile( eAccessFlag, sec, _T("OpNo")				, &(tpDst->tpTableCol[SETTING4_OPNO				].szName), DATA_ATTR_STRING, def ) ;	// OP番号
			IniFile.AccessProfile( eAccessFlag, sec, _T("MeasureItem")		, &(tpDst->tpTableCol[SETTING4_MESITEM			].szName), DATA_ATTR_STRING, def ) ;	// 計測項目
			IniFile.AccessProfile( eAccessFlag, sec, _T("MeasureItemName")	, &(tpDst->tpTableCol[SETTING4_MESITEM_NAME		].szName), DATA_ATTR_STRING, def ) ;	// 計測項目名称
			IniFile.AccessProfile( eAccessFlag, sec, _T("NgBit")			, &(tpDst->tpTableCol[SETTING4_NGBIT			].szName), DATA_ATTR_STRING, def ) ;	// NGビット
			IniFile.AccessProfile( eAccessFlag, sec, _T("ResultId")			, &(tpDst->tpTableCol[SETTING4_RESULTID			].szName), DATA_ATTR_STRING, def ) ;	// 結果ID
			IniFile.AccessProfile( eAccessFlag, sec, _T("DataItem")			, &(tpDst->tpTableCol[SETTING4_DATAITEM			].szName), DATA_ATTR_STRING, def ) ;	// データ項目
			IniFile.AccessProfile( eAccessFlag, sec, _T("CncNo")			, &(tpDst->tpTableCol[SETTING4_CNC_NO			].szName), DATA_ATTR_STRING, def ) ;	// CNC No
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNameIpAddress") , &(tpDst->tpTableCol[SETTING4_IPADDRESS		].szName), DATA_ATTR_STRING, def ) ;	// IPアドレスカラム名
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNameModelName") , &(tpDst->tpTableCol[SETTING4_MODELNAME		].szName), DATA_ATTR_STRING, def ) ;	// 加工機名カラム名
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNameFeatureType"), &(tpDst->tpTableCol[SETTING4_FEATURETYPE		].szName), DATA_ATTR_STRING, def ) ;	// KOMTAS Viewer機能選択カラム名
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNameNcLoggerFileName") , &(tpDst->tpTableCol[SETTING4_NCLOGGER_FILENAME].szName), DATA_ATTR_STRING, def );	// 生データファイル名
			IniFile.AccessProfile(eAccessFlag, sec, _T("ColNameToolNo"), &(tpDst->tpTableCol[SETTING4_TOOLNO].szName), DATA_ATTR_STRING, def);	// 工具番号

			// 特徴量ごとの項目
			for( INT32 i = 0 ; i < NOF_MES_FEATURE ; i++ ){
				nColOffset = i * ( SETTING4_FEATURE2_ENABLE - SETTING4_FEATURE1_ENABLE ) ;
				// 有効
				strKey.Format( _T("Feature%dEnable"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->tpTableCol[SETTING4_FEATURE1_ENABLE + nColOffset].szName), DATA_ATTR_STRING, def ) ;

				// 名称
				strKey.Format( _T("Feature%dName"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->tpTableCol[SETTING4_FEATURE1_NAME + nColOffset].szName), DATA_ATTR_STRING, def ) ;
	
				// 判定
				strKey.Format( _T("Feature%dJudge"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->tpTableCol[SETTING4_FEATURE1_JUDGE + nColOffset].szName) , DATA_ATTR_STRING, def ) ;

				// 判定種類
				strKey.Format( _T("Feature%dJudgeKind"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->tpTableCol[SETTING4_FEATURE1_JDGKIND + nColOffset].szName) , DATA_ATTR_STRING, def ) ;

				// 計測値
				strKey.Format( _T("Feature%dValue"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->tpTableCol[SETTING4_FEATURE1_VALUE + nColOffset].szName) , DATA_ATTR_STRING, def ) ;

				// 計測値下限
				strKey.Format( _T("Feature%dMin"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->tpTableCol[SETTING4_FEATURE1_MIN + nColOffset].szName) , DATA_ATTR_STRING, def ) ;

				// 計測値上限
				strKey.Format( _T("Feature%dMax"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->tpTableCol[SETTING4_FEATURE1_MAX + nColOffset].szName) , DATA_ATTR_STRING, def ) ;

			}

			// CSV列No
			strSection.Format( _T("CsvColNo") ) ; sec = (TCHAR *)(LPCTSTR)strSection;
			IniFile.AccessProfile( eAccessFlag, sec, _T("WorkId")			, &(tpDst->pnCsvColNo[SETTING4_WORKID			]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// ワークID
			IniFile.AccessProfile( eAccessFlag, sec, _T("DateTime")			, &(tpDst->pnCsvColNo[SETTING4_DATETIME			]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// 計測日時
			IniFile.AccessProfile( eAccessFlag, sec, _T("OpNo")				, &(tpDst->pnCsvColNo[SETTING4_OPNO				]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// OP番号
			IniFile.AccessProfile( eAccessFlag, sec, _T("MeasureItem")		, &(tpDst->pnCsvColNo[SETTING4_MESITEM			]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// 計測項目
			IniFile.AccessProfile( eAccessFlag, sec, _T("MeasureItemName")	, &(tpDst->pnCsvColNo[SETTING4_MESITEM_NAME		]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// 計測項目名称
			IniFile.AccessProfile( eAccessFlag, sec, _T("NgBit")			, &(tpDst->pnCsvColNo[SETTING4_NGBIT			]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// NGビット
			IniFile.AccessProfile( eAccessFlag, sec, _T("ResultId")			, &(tpDst->pnCsvColNo[SETTING4_RESULTID			]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// 結果ID
			IniFile.AccessProfile( eAccessFlag, sec, _T("DataItem")			, &(tpDst->pnCsvColNo[SETTING4_DATAITEM			]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// データ項目
			IniFile.AccessProfile( eAccessFlag, sec, _T("CncNo")			, &(tpDst->pnCsvColNo[SETTING4_CNC_NO			]), DATA_ATTR_INT32, &(nDefault=1) ) ;	// CNC No
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNoIpAddress")	, &(tpDst->pnCsvColNo[SETTING4_IPADDRESS		]), DATA_ATTR_INT32, &(nDefault = 32));	// IPアドレス列番号
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNoModelName")	, &(tpDst->pnCsvColNo[SETTING4_MODELNAME		]), DATA_ATTR_INT32, &(nDefault = 33));	// 加工機名列番号
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNoFeatureType")	, &(tpDst->pnCsvColNo[SETTING4_FEATURETYPE		]), DATA_ATTR_INT32, &(nDefault = 34));	// KOMTAS Viewer機能選択列番号
			IniFile.AccessProfile( eAccessFlag, sec, _T("ColNoNcLoggerFileName")	, &(tpDst->pnCsvColNo[SETTING4_NCLOGGER_FILENAME]), DATA_ATTR_INT32, &(nDefault = 1));	// 生データファイル名
			IniFile.AccessProfile(eAccessFlag, sec, _T("ColNoToolNo"), &(tpDst->pnCsvColNo[SETTING4_TOOLNO]), DATA_ATTR_INT32, &(nDefault = 35));	// 工具番号

			// 特徴量ごとの項目
			for( INT32 i = 0 ; i < NOF_MES_FEATURE ; i++ ){
				nColOffset = i * ( SETTING4_FEATURE2_ENABLE - SETTING4_FEATURE1_ENABLE ) ;
				// 有効
				strKey.Format( _T("Feature%dEnable"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->pnCsvColNo[SETTING4_FEATURE1_ENABLE + nColOffset]), DATA_ATTR_INT32, &(nDefault=1 ) ) ;

				// 名称
				strKey.Format( _T("Feature%dName"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->pnCsvColNo[SETTING4_FEATURE1_NAME + nColOffset]), DATA_ATTR_INT32, &(nDefault=1 ) ) ;
	
				// 判定
				strKey.Format( _T("Feature%dJudge"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->pnCsvColNo[SETTING4_FEATURE1_JUDGE + nColOffset]) , DATA_ATTR_INT32, &(nDefault=1 ) ) ;

				// 判定種類
				strKey.Format( _T("Feature%dJudgeKind"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->pnCsvColNo[SETTING4_FEATURE1_JDGKIND + nColOffset]) , DATA_ATTR_INT32, &(nDefault=1 ) ) ;

				// 計測値
				strKey.Format( _T("Feature%dValue"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->pnCsvColNo[SETTING4_FEATURE1_VALUE + nColOffset]) , DATA_ATTR_INT32, &(nDefault=1 ) ) ;

				// 計測値下限
				strKey.Format( _T("Feature%dMin"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->pnCsvColNo[SETTING4_FEATURE1_MIN + nColOffset]) , DATA_ATTR_INT32, &(nDefault=1 ) ) ;

				// 計測値上限
				strKey.Format( _T("Feature%dMax"), i + 1 ) ; key = (TCHAR *)(LPCTSTR)strKey;
				IniFile.AccessProfile( eAccessFlag, sec, key, &(tpDst->pnCsvColNo[SETTING4_FEATURE1_MAX + nColOffset]) , DATA_ATTR_INT32, &(nDefault=1 ) ) ;

			}

			break ;
		}
		// 工具ステータスデータ設定
		case COLLECT_PRODUCTSINFO:
		{
			// ファイル識別
			IniFile.AccessProfile(eAccessFlag, sec, _T("FileName"), &(tpDst->szFileName), DATA_ATTR_STRING, _T("ProductInfo"));

			// テーブル列名
			strSection.Format(_T("TableColName")); sec = (TCHAR *)(LPCTSTR)strSection;
			strDefault.Format(_T("")); def = (TCHAR *)(LPCTSTR)strDefault;
			IniFile.AccessProfile(eAccessFlag, sec, _T("ColNameDateTime"), &(tpDst->tpTableCol[PRODUCTINFO_DATETIME].szName), DATA_ATTR_STRING, def);	// 計測日時カラム名
			IniFile.AccessProfile(eAccessFlag, sec, _T("ColNameToolNo"), &(tpDst->tpTableCol[PRODUCTINFO_TOOLNO].szName), DATA_ATTR_STRING, def);	// 工具番号カラム名
			IniFile.AccessProfile(eAccessFlag, sec, _T("ColNameToolCounts"), &(tpDst->tpTableCol[PRODUCTINFO_TOOLCOUNTS].szName), DATA_ATTR_STRING, def);	// 工具カウントカラム名
			IniFile.AccessProfile(eAccessFlag, sec, _T("ColNameWorkCounts"), &(tpDst->tpTableCol[PRODUCTINFO_WORKCOUNTS].szName), DATA_ATTR_STRING, def);	// ワークカウントカラム名
			IniFile.AccessProfile(eAccessFlag, sec, _T("ColNameWorkType"), &(tpDst->tpTableCol[PRODUCTINFO_WORKTYPE].szName), DATA_ATTR_STRING, def);	// 車種カラム名
			IniFile.AccessProfile(eAccessFlag, sec, _T("ColNameWorkSerial"), &(tpDst->tpTableCol[PRODUCTINFO_WORKSERIAL].szName), DATA_ATTR_STRING, def);	// ワークシリアルカラム名
			IniFile.AccessProfile(eAccessFlag, sec, _T("ColNameCustomMacroVal1"), &(tpDst->tpTableCol[PRODUCTINFO_CUSTOMMACRO1].szName), DATA_ATTR_STRING, def);	// マクロ値カラム名
			IniFile.AccessProfile(eAccessFlag, sec, _T("ColNameCustomMacroVal2"), &(tpDst->tpTableCol[PRODUCTINFO_CUSTOMMACRO2].szName), DATA_ATTR_STRING, def);	// マクロ値カラム名


			// CSV列No
			strSection.Format(_T("CsvColNo")); sec = (TCHAR *)(LPCTSTR)strSection;
			IniFile.AccessProfile(eAccessFlag, sec, _T("ColNoDateTime"), &(tpDst->pnCsvColNo[PRODUCTINFO_DATETIME]), DATA_ATTR_INT32, &(nDefault = 1));		// 計測日時カラム番号
			IniFile.AccessProfile(eAccessFlag, sec, _T("ColNoToolNo"), &(tpDst->pnCsvColNo[PRODUCTINFO_TOOLNO]), DATA_ATTR_INT32, &(nDefault = 2));				// 工具番号カラム番号
			IniFile.AccessProfile(eAccessFlag, sec, _T("ColNoToolCounts"), &(tpDst->pnCsvColNo[PRODUCTINFO_TOOLCOUNTS]), DATA_ATTR_INT32, &(nDefault = 3));		// 工具カウントカラム番号
			IniFile.AccessProfile(eAccessFlag, sec, _T("ColNoWorkCounts"), &(tpDst->pnCsvColNo[PRODUCTINFO_WORKCOUNTS]), DATA_ATTR_INT32, &(nDefault = 4));	// ワークカウントカラム番号
			IniFile.AccessProfile(eAccessFlag, sec, _T("ColNoWorkType"), &(tpDst->pnCsvColNo[PRODUCTINFO_WORKTYPE]), DATA_ATTR_INT32, &(nDefault = 5));			// 車種カラム番号
			IniFile.AccessProfile(eAccessFlag, sec, _T("ColNoWorkSerial"), &(tpDst->pnCsvColNo[PRODUCTINFO_WORKSERIAL]), DATA_ATTR_INT32, &(nDefault = 6));		// ワークシリアルカラム番号
			IniFile.AccessProfile(eAccessFlag, sec, _T("ColNoCustomMacroVal1"), &(tpDst->pnCsvColNo[PRODUCTINFO_CUSTOMMACRO1]), DATA_ATTR_INT32, &(nDefault = 7));	// マクロ値カラム番号
			IniFile.AccessProfile(eAccessFlag, sec, _T("ColNoCustomMacroVal2"), &(tpDst->pnCsvColNo[PRODUCTINFO_CUSTOMMACRO2]), DATA_ATTR_INT32, &(nDefault = 8));	// マクロ値カラム番号		

			break;
		}
	}

}
