「C Sharpの基礎 - TOML」の版間の差分

ナビゲーションに移動 検索に移動
246行目: 246行目:
<br>
<br>
==== TOMLファイルの読み込み ====
==== TOMLファイルの読み込み ====
 
以下の例では、Tomlynライブラリを使用して、指定されたTOMLファイルを読み込み・解析して、その内容を表示している。<br>
<br>
* ファイルの読み込みと設定の表示
*: ReadTomlConfigAsyncとDisplayConfigAsyncメソッドで行う。
* ストリーミング処理
*: ReadTomlConfigAsyncメソッド内でFileStreamを使用して、大きなファイルでも効率的に読み込めるようにしている。
*: useAsyncプロパティをtrueを指定することにより、非同期I/O操作を有効にしている。
* TOMLファイルの解析
*: Toml.ToModelメソッドを使用して、TOMLの内容をTomlTableオブジェクトに変換している。
* 設定の表示
*: DisplayConfigAsyncメソッド内で、解析されたTOML設定の各セクションを順番に表示している。
*: ネストされた構造や配列も適切に処理している。
<br>
<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>
<syntaxhighlight lang="c#">
using System;
using System.IO;
using System.Collections.Generic;
using System.Threading.Tasks;
using Tomlyn;
using Tomlyn.Model;
class Program
{
    static async Task Main(string[] args)
    {
      string filePath = "sample.toml";  // TOMLファイルのパス
      try
      {
          // ファイルを非同期で読み込み・解析
          var config = await ReadTomlConfigAsync(filePath);
          // 解析した設定を表示
          await DisplayConfigAsync(config);
      }
      catch (Exception ex)
      {
          Console.WriteLine($"エラーが発生: {ex.Message}");
      }
    }
    // TOMLファイルを非同期で読み込み・解析
    static async Task<TomlTable> ReadTomlConfigAsync(string filePath)
    {
      using (var stream = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.Read, bufferSize: 4096, useAsync: true))
      using (var reader = new StreamReader(stream))
      {
          string tomlContent = await reader.ReadToEndAsync();
          return Toml.ToModel(tomlContent);
      }
    }
    // 解析された設定を非同期で表示
    static async Task DisplayConfigAsync(TomlTable config)
    {
      await Task.Run(() =>
      {
          Console.WriteLine($"タイトル: {config["title"]}");
          // ユーザ情報の表示
          var user = (TomlTable)config["user"];
          Console.WriteLine("ユーザ情報:");
          Console.WriteLine($"名前: {user["name"]}");
          Console.WriteLine($"年齢: {user["age"]}");
          Console.WriteLine($"メール: {user["email"]}");
          // アプリケーション設定の表示
          var app = (TomlTable)config["application"];
          Console.WriteLine("アプリケーション設定:");
          Console.WriteLine($"バージョン: {app["version"]}");
          Console.WriteLine($"デバッグモード: {app["debug_mode"]}");
          // データベース接続情報の表示
          var db = (TomlTable)config["database"];
          Console.WriteLine("データベース接続情報:");
          Console.WriteLine($"ホスト: {db["host"]}");
          Console.WriteLine($"ポート: {db["port"]}");
          Console.WriteLine($"ユーザー名: {db["username"]}");
          Console.WriteLine($"パスワード: {db["password"]}");
          // 機能の表示
          var features = (TomlTable)config["features"];
          Console.WriteLine("機能:");
          Console.WriteLine($"有効: {string.Join(", ", (List<object>)features["enabled"])}");
          Console.WriteLine($"無効: {string.Join(", ", (List<object>)features["disabled"])}");
          // ロギング設定の表示
          var logging = (TomlTable)config["logging"];
          Console.WriteLine("ロギング設定:");
          Console.WriteLine($"レベル: {logging["level"]}");
          Console.WriteLine($"ファイル: {logging["file"]}");
          // サーバ情報の表示
          var servers = (List<object>)config["servers"];
          Console.WriteLine("サーバ情報:");
          foreach (TomlTable server in servers)
          {
            Console.WriteLine($"IP: {server["ip"]}");
            Console.WriteLine($"役割: {server["role"]}");
            Console.WriteLine();
          }
      });
    }
}
</syntaxhighlight>
<br><br>
<br><br>


案内メニュー