メタデータにアクセスする


メタデータは、他のデータを参照する情報です。サンプルには、データが元々収集された時刻、データを収集した機器を操作した人、調べた標本の温度が含まれます。メタデータはプロジェクト、ページ、レイヤ、列に保存することができます。

データ範囲にアクセスする

Origin CのProjectクラスは、Origin CのDataRangeオブジェクトを現在のプロジェクトに追加、取得、削除するメソッドを提供しています。

Worksheet wks = Project.ActiveLayer();

DataRange dr;                   // 範囲オブジェクトを構成
dr.Add("X", wks, 0, 0, -1, -1); // ワークシート全体を範囲に追加
dr.SetName("Range1");           // 範囲名をセット
int UID = dr.GetUID(TRUE);      //範囲オブジェクトの固有IDを取得

int nn = Project.AddDataRange(dr); // 範囲をプロジェクトに追加

コマンドウィンドウまたはスクリプトウィンドウで、LabTalkコマンド list r を使って、現在のプロジェクトのすべてのDataRangeオブジェクトを一覧表示します。

ツリーにアクセス

プロジェクト内のツリーにアクセスする

ツリーの追加

このコードは、ツリー型の変数を宣言し、いくつかのデータをツリーのノードに割り当て、ツリーを現在のプロジェクトにツリーを追加します。

Tree tr;
tr.FileInfo.name.strVal = "Test.XML";
tr.FileInfo.size.nVal = 255;

//ツリー変数をプロジェクトに追加
int nNumTrees = Project.AddTree("Test", tr); 
out_int("The number of trees in project: ", nNumTrees);


ツリーを取得

同様に、似たようなコードは、Test という既存のツリー変数に保存され、trTest という新しいツリー変数に配置します。

// 名前でプロジェクトからツリーを取得
Tree trTest;
if( Project.GetTree("Test", trTest) )
	out_tree(trTest);

すべてのLabTalkツリーの名前を取得

Project::GetTreeNamesメソッドは、プロジェクト内のすべてのLabTalkツリー変数の名前を取得します。 ここで、名前はstring vectorに割り当てられ、割り当てられる文字列の数は、int型で返されます。

vector<string> vsTreeNames;
int nNumTrees = Project.GetTreeNames(vsTreeNames);

ワークシート内のツリーにアクセスする

OriginObject::PutBinaryStorage がOriginオブジェクト、例えば、WorksheetPage, Worksheet, Column, GraphPage, MatrixPage などの多くの型にツリーを配置するのに使われます。

ツリーの追加

現在のプロジェクトにワークシートウィンドウを保持し、下記のサンプルコードを実行します。ユーザツリーを追加するコードを実行した後、ワークシートウィンドウのタイトルを右クリックし、オーガナイザの表示を選び、右側のパネルに追加したユーザツリーが表示されます。

Worksheet wks = Project.ActiveLayer();
if( wks )
{
	Tree tr;
	tr.name.strVal = "Jacky";
	tr.id.nVal = 7856;
	
	// wksTreeというツリーをワークシートオブジェクトに配置
	string strStorageName = "wksTree";
	wks.PutBinaryStorage(strStorageName, tr);	
}

ツリーを取得

OriginObject::GetBinaryStorage メソッドは、名前でOriginオブジェクトからツリーを取得するのに使われます。

Worksheet wks = Project.ActiveLayer();
if( wks )
{	
	Tree tr;
	string strStorageName = "wksTree";
	
	// wksTreeというツリーが存在していればTrueを返す

	if( wks.GetBinaryStorage(strStorageName, tr) )
		out_tree(tr); // ツリーを出力 
}

すべてのツリーの名前を取得

OriginObject::GetStorageNames メソッドはOriginオブジェクト内に保存されるすべての名前を取得します。INI とバイナリの2つのストレージタイプがあります。ツリーはバイナリストレージに属し、以下のサンプルコードはワークシートからバイナリストレージを取得する方法を示します。

Worksheet wks = Project.ActiveLayer();
if( wks )
{
	// すべてのバイナリタイプのストレージの名前を取得 
	vector<string> vsNames;
	wks.GetStorageNames(vsNames, STORAGE_TYPE_BINARY); 
	
	for(int nn = 0; nn < vsNames.GetSize(); nn++)
		out_str(vsNames[nn]);
}

ワークシート列内のツリーにアクセスする

ワークシート列でツリーをセットおよび取得するには、上記で説明したようにワークシートでツリーをセットおよび取得するのと同じ方法を使います。

ツリーの追加

Worksheet wks = Project.ActiveLayer();
Column col(wks, 0);

Tree tr;
tr.test.strVal = "This is a column";
tr.value.dVal = 0.15;

col.PutBinaryStorage("colTree", tr);

ツリーを取得

Worksheet wks = Project.ActiveLayer();
Column col(wks, 0);

Tree tr;	
if( col.GetBinaryStorage("colTree", tr) )
	out_tree(tr);

すべてのツリーの名前を取得

Worksheet wks = Project.ActiveLayer();
Column col(wks, 0);

// すべてのバイナリタイプのストレージの名前を取得 
vector<string> vsNames;
col.GetStorageNames(vsNames, STORAGE_TYPE_BINARY); 

for(int nn = 0; nn < vsNames.GetSize(); nn++)
	out_str(vsNames[nn]);

ファイルインポートのツリーノードにアクセスする

ワークシートにデータをインポートしたあと、Originはページレベルで特別なツリーのような構造のメタデータを保存します。ファイルについての基本情報は、ツリーから直接取り出したり、配置することができます。

Worksheet wks = Project.ActiveLayer();
WorksheetPage wksPage = wks.GetPage();

storage st;
st = wksPage.GetStorage("system");   

Tree    tr;
tr = st;

double dDate = tr.Import.FileDate.dVal;    
printf("File Date: %s\n", get_date_str(dDate, LDF_SHORT_AND_HHMMSS_SEPARCOLON));
printf("File Name: %s\n", tr.Import.FileName.strVal);
printf("File Path: %s\n", tr.Import.FilePath.strVal);

レポートシートツリーにアクセスする

分析レポートシートは、ツリー構造に基づく特別な形式のワークシートです。次のように、レポートシートからレポートツリーを取得できます。

Worksheet wks = Project.ActiveLayer();

Tree trReport;
uint uid; // レポート範囲のUIDを受け取る
// エスケープ操作文字列を変換する(ex.?$OP:A=1) 
// 戻りのツリーに実際のデータセット名
bool bTranslate = true; 
if( wks.GetReportTree(trReport, &uid, 0, GRT_TYPE_RESULTS, true) )
{
	out_tree(trReport);
}