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