![](https://static.wixstatic.com/media/ea798a_1e5d4aafb98d429cbcb7a33527d100de~mv2.jpg/v1/fill/w_1920,h_1080,al_c,q_90,enc_avif,quality_auto/ea798a_1e5d4aafb98d429cbcb7a33527d100de~mv2.jpg)
19. MyIni クラス
Space Engineers では、スクリプトの実行に必要な設定情報などを扱いやすくするために、MyIni クラスを利用することができます。MyIni クラスは、文字列を ini 形式として解析しデータとして取得でき、逆に ini 形式の文字列としてデータを書き出すことも可能です。
主な使い方としては、ほとのどのブロックが持つ Custom Data にテキストデータとして設定情報を ini 形式で書き込んでおき、スクリプトからこのデータを読み込んで設定を行うといったものです。こうすることにより、スクリプトの動作や設定を変更したい場合、スクリプトを直接編集することなく、Custom Data の ini 形式データを書き換えるだけで変更が可能です。
ここでは、MyIni クラスの基本的な使い方について説明します。
16-1. フォーマット
MyIni クラスでは解析する文字列データの基本的な構文は以下の通りです。
[First Section]
;Comment
Key1 = Value1
Key2 = Value2
[Second Section]
Key3 = Value3
マルチライン構造を使うことで、複数行にわたるテキストをひとつの Key に入れることもできます。次の例のように、複数行にわたるデータの行頭に "|" を挿入することでマルチライン構造であることを表します。"=" の後にデータは記述せず、改行後 "|" を挿入してから 1 行目のデータをはじめます。
[Third Section]
Key 4 =
|First line value
|Second line value
独立した行の 3 つ連続したハイフンは、そこまでで ini データの解析を停止し、その後の残りのデータを EndContent プロパティに格納することを意味します。
---
2. 使い方
2-1. 読み込み
まず下の例に示すように、MyIni クラスのインスタンスを生成し、TryParse メソッドで string 型のCustomData を ini データとして解析します。TryParse メソッドは解析に成功すると true を失敗すると false を返し、MyIniParseResult 型の result に解析が成功した場合は null を失敗した場合はエラーの内容が格納されます。解析が成功したら、MyIni クラスの Get メソッドでセクションとキーを指定してデータを抽出します。Get メソッドは MyIniValue 型の値を返しますので、適当なMyIniValue のメソッドで代入する変数の型に合わせてデータを取り出します。
MyIni iniData = new MyIni();
MyIniParseResult result;
bool value1;
string value2;
public Program()
{
if (!iniData.TryParse(Me.CustomData, out result))
throw new Exception(result.ToString());
value1 = iniData.Get("First Section", "Key1").ToBoolean();
value2 = iniData.Get("Second Section", "Key3").ToString();
}
2-2. 保存
次に MyIni クラスを使った、ini 形式の文字列を生成する方法を紹介します。下の例では Save メソッドの中で ini 形式文字列を生成し、Programmable Block の Custom Data に生成した ini 形式文字列を保存しています。まずは ini 形式文字列を読み込む場合と同様に、Custom Data 内の文字列を TryParse メソッドで ini 形式として解析します。正常に解析できたら、ini データ中のセクションとキーを指定して、Set メソッドで任意の値をセットします。最後に、ini データを string 型で Custom Data に書き込みます。
public void Save()
{
MyIniParseResult result;
if (!iniData.TryParse(Me.CustomData, out result))
throw new Exception(result.ToString());
iniData.Set("First Section", "Key1", value1);
iniData.Set("Second Section", "Key3", value2);
Me.CustomData = iniData.ToString();
}