メタデータにアクセスする
メタデータは、他のデータを参照する情報です。サンプルには、データが元々収集された時刻、データを収集した機器を操作した人、調べた標本の温度が含まれます。メタデータはプロジェクト、ページ、レイヤ、列に保存することができます。
データ範囲にアクセスするProject, Add Range VariableProject, List All Range Variables
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オブジェクトを一覧表示します。
ツリーにアクセス
プロジェクト内のツリーにアクセスするProject, Add Tree Variable
ツリーの追加
このコードは、ツリー型の変数を宣言し、いくつかのデータをツリーのノードに割り当て、ツリーを現在のプロジェクトにツリーを追加します。
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]);
}
ワークシート列内のツリーにアクセスする
ワークシート列でツリーをセットおよび取得するには、上記で説明したようにワークシートでツリーをセットおよび取得するのと同じ方法を使います。
ツリーの追加
Column, Add Tree Variable
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);
ツリーを取得
Column, Get Tree Variable
Worksheet wks = Project.ActiveLayer();
Column col(wks, 0);
Tree tr;
if( col.GetBinaryStorage("colTree", tr) )
out_tree(tr);
すべてのツリーの名前を取得
Column, Get the Names of All Storages
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]);
ファイルインポートのツリーノードにアクセスする Import File, Get Storage Tree by Name
ワークシートにデータをインポートしたあと、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);
レポートシートツリーにアクセスする Report Sheet, Get Result Tree
分析レポートシートは、ツリー構造に基づく特別な形式のワークシートです。次のように、レポートシートからレポートツリーを取得できます。
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);
}
|