13,160
回編集
| 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> | ||