Tomlyn讀取tom文件

TOML作爲一種新的設定文件十分有用,以下是讀取方法:

TOML源文件:

# This is a TOML document. Boom.

title = "TOML Example"

# Line breaks are OK when inside arrays
hosts = [
  "alpha",
  "omega"
]

[owner]
name = "Tom Preston-Werner"
organization = "GitHub"
bio = "GitHub Cofounder & CEO\nLikes tater tots and beer."
dob = 1979-05-27T07:32:00Z # First class dates? Why not?

[database]
server = "192.168.1.1"
ports = [ 8001, 8001, 8002 ]
connection_max = 5000
enabled = true

[servers]

  # You can indent as you please. Tabs or spaces. TOML don't care.
  [servers.alpha]
  ip = "10.0.0.1"
  dc = "eqdc10"

  [servers.beta]
  ip = "10.0.0.2"
  dc = "eqdc10"

[clients]
data = [ ["gamma", "delta"], [1, 2] ] # just an update to make sure parsers support it

讀取代碼:

using System;
using System.IO;
using Tomlyn;
using Tomlyn.Model;

namespace TomlSample
{
    class Program
    {
        static void Main(string[] args)
        {
            using (FileStream fs = new FileStream("sample.toml", FileMode.Open))
            {
                byte[] buffer = new byte[fs.Length];
                fs.Read(buffer, 0, buffer.Length);
                var doc = Toml.Parse(buffer);
                var table = doc.ToModel();
                //// title
                Console.WriteLine(@$"""Title"" = {table["title"]}");

                //// host
                TomlArray hosts = table["hosts"] as TomlArray;

                Console.WriteLine(@"""hosts"" = [");
                for(int i = 0; i < hosts.Count; i++)
                {
                    Console.Write($"\t{hosts[i]}");

                    if (i < (hosts.Count - 1))
                    {
                        Console.WriteLine(",");
                    }
                    else
                    {
                        Console.WriteLine("");
                    }
                }
                Console.WriteLine(@"]");

                //// owner table
                Console.WriteLine(@$"""owner"".""name"" = {((TomlTable)table["owner"])["name"]}");
                Console.WriteLine($@"""owner"".""organization"" = {((TomlTable)table["owner"])["organization"]}");
                Console.WriteLine($@"""owner"".""bio"" = {((TomlTable)table["owner"])["bio"]}");
                Console.WriteLine($@"""owner"".""dob"" = {((TomlTable)table["owner"])["dob"]}");

                //// database table
                TomlTable database = table["database"] as TomlTable;
                var server = database["server"];
                Console.WriteLine(@$"""database"".""server"" = {server}");
                TomlArray ports = database["ports"] as TomlArray;
                Console.WriteLine(@"""database"".""ports"" = [");

                for (int i = 0; i < ports.Count; i++)
                {
                    Console.Write($"{ports[i]}");

                    if (i < (ports.Count - 1))
                    {
                        Console.WriteLine(",");
                    }
                    else
                    {
                        Console.WriteLine("");
                    }
                }
                Console.WriteLine("]");
                var connection_max = database["connection_max"];
                Console.WriteLine(@$"""database"".""connection_max"" = {connection_max}");
                var enabled = database["enabled"];
                Console.WriteLine($@"""database"".""enabled"" = {enabled}");

                //// servers table
                TomlTable servers = table["servers"] as TomlTable;
                //// alpha sub table
                TomlTable alpha = servers["alpha"] as TomlTable;
                Console.WriteLine(@$"""servers"".""alpha"".""ip"" = {alpha["ip"]}");
                Console.WriteLine($@"""servers"".""alpha"".""dc"" = {alpha["dc"]}");
                TomlTable beta = servers["beta"] as TomlTable;
                Console.WriteLine($@"""servers"".""beta"".""ip"" = {beta["ip"]}");
                Console.WriteLine(@$"""servers"".""beta"".""dc"" = {beta["dc"]}");

                //// clients table
                TomlTable clients = table["clients"] as TomlTable;
                TomlArray data = clients["data"] as TomlArray;
                Console.WriteLine($@"""clients"".""data"" = [");

                for (int i = 0; i < data.Count; i++)
                {
                    TomlArray array = data[i] as TomlArray;

                    Console.WriteLine("\t[");
                    for (int j = 0; j < array.Count; j++)
                    {
                        Console.Write($"\t\t{array[i]}");

                        if (j < (array.Count - 1))
                        {
                            Console.WriteLine(",");
                        }
                        else
                        {
                            Console.WriteLine("");
                        }
                    }
                    Console.Write("\t]");

                    if (i < (data.Count - 1))
                    {
                        Console.WriteLine(",");
                    }
                    else
                    {
                        Console.WriteLine("");
                    }
                }

                Console.WriteLine("]");
            }
        }
    }
}

示例代碼倉庫

發佈了156 篇原創文章 · 獲贊 10 · 訪問量 21萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章