top of page

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();
}

bottom of page