674行目: 674行目:
<br>
<br>
また、大きなサイズなTOMLファイルを扱う場合は、ストリーミング処理を使用することを推奨する。<br>
また、大きなサイズなTOMLファイルを扱う場合は、ストリーミング処理を使用することを推奨する。<br>
<br>
==== 使用するTOMLファイル ====
<syntaxhighlight lang="toml">
# 使用するTOMLファイル
title = "設定ファイル"  # トップレベルのキー
[user]                # ユーザ情報のセクション
name = "山田太郎"
age = 30
email = "yamada@example.com"
[application]        # アプリケーション設定のセクション
version = "1.0.0"
debug_mode = false
[database]            # データベース接続情報のセクション
host = "localhost"
port = 5432
username = "admin"
password = "secret"
[features]            # 機能のオン / オフを制御するセクション
enabled = ["login", "logout", "dashboard"]
disabled = ["admin_panel"]
[logging]            # ロギング設定のセクション
level = "info"
file = "/var/log/app.log"
[[servers]]          # サーバ情報の配列
ip = "192.168.1.1"
role = "frontend"
[[servers]]          # サーバ情報の配列
ip = "192.168.1.2"
role = "backend"
</syntaxhighlight>
<br>
<br>
==== TOMLファイルの読み込み ====
==== TOMLファイルの読み込み ====
以下の例では、指定されたTOMLファイルを非同期で読み込み、その内容を解析・表示している。<br>
<br>
* 非同期処理
*: ファイルの読み込み・解析では、await TOML.ParseAsync(reader)メソッドを使用する。
* ストリーミング処理
*: StreamReaderクラスを使用して、ファイルをストリームとして読み込む。
* 構造化されたデータの読み込み
*: セクションごとに適切にデータを読み込み・表示している。
*: 配列データ (例: features、servers) は、繰り返し文を使用して処理する。
<br>
<syntaxhighlight lang="c#">
using System;
using System.IO;
using System.Threading.Tasks;
using Tommy;
class Program
{
    static async Task Main(string[] args)
    {
      string filePath = "sample.toml";  // TOMLファイルのパス
      try
      {
          // TOMLファイルを非同期で読み込む
          using (var reader = new StreamReader(filePath))
          {
            var toml = await TOML.ParseAsync(reader);
            // トップレベルのキーを読み込む
            Console.WriteLine($"タイトル: {toml["title"]}");
            // ユーザ情報のセクションを読み込む
            var user = toml["user"];
            Console.WriteLine($"ユーザ名: {user["name"]}");
            Console.WriteLine($"年齢: {user["age"]}");
            Console.WriteLine($"メール: {user["email"]}");
            // アプリケーション設定のセクションを読み込む
            var app = toml["application"];
            Console.WriteLine($"バージョン: {app["version"]}");
            Console.WriteLine($"デバッグモード: {app["debug_mode"]}");
            // データベース接続情報のセクションを読み込む
            var db = toml["database"];
            Console.WriteLine($"ホスト: {db["host"]}");
            Console.WriteLine($"ポート: {db["port"]}");
            Console.WriteLine($"ユーザ名: {db["username"]}");
            Console.WriteLine($"パスワード: {db["password"]}");
            // 機能のオン / オフを制御するセクションを読み込む
            var features = toml["features"];
            Console.WriteLine("有効な機能:");
            foreach (var feature in features["enabled"].AsArray)
            {
                Console.WriteLine($"- {feature}");
            }
            Console.WriteLine("無効な機能:");
            foreach (var feature in features["disabled"].AsArray)
            {
                Console.WriteLine($"- {feature}");
            }
            // ロギング設定のセクションを読み込む
            var logging = toml["logging"];
            Console.WriteLine($"ログレベル: {logging["level"]}");
            Console.WriteLine($"ログファイル: {logging["file"]}");
            // サーバ情報の配列を読み込む
            var servers = toml["servers"].AsArray;
            Console.WriteLine("サーバ情報:");
            foreach (var server in servers)
            {
                Console.WriteLine($"IP: {server["ip"]}, 役割: {server["role"]}");
            }
          }
      }
      catch (FileNotFoundException)
      {
          Console.WriteLine($"エラー: ファイル '{filePath}' が存在しない");
      }
      catch (TomlParseException ex)
      {
          Console.WriteLine($"エラー: TOMLファイルの解析に失敗  行 {ex.Line}, 列 {ex.Column}: {ex.Message}");
      }
      catch (Exception ex)
      {
          Console.WriteLine($"予期せぬエラーが発生: {ex.Message}");
      }
    }
}
</syntaxhighlight>
<br><br>
<br><br>


__FORCETOC__
__FORCETOC__
[[カテゴリ:C_Sharp]]
[[カテゴリ:C_Sharp]]