| 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]] | ||