在控制台中添加表格 - Spectre Console系列
Spectre.Console是一個強大的.NET程式庫,可以幫助您創建漂亮的控制台應用程式。 除了單純的文字輸出,您可以建立結構化的佈局、使用顏色,甚至顯示進度條或互動式提示。在他的Spectre Console系列中,Tim Corey向開發者展示了如何通過小而實用的課程充分利用這個程式庫。
在他的影片中,"Adding Tables to Your Console - Spectre Console Series",Tim專注於Spectre.Console表格。 表格是核心功能,可以讓您顯示具有對齊、填充、邊框和樣式的結構化資料。 我們將深入了解Tim的操作步驟,讓您可以準確了解如何使用此功能。
開始使用Spectre.Console
一開始(0:00),Tim解釋道,Spectre.Console可以讓您建立視覺上吸引人且資訊豐富的應用程式。 它作為名為Spectre.Console的NuGet套件進行發佈。 您可以很容易地安裝它:
// dotnet add package spectre console
dotnet add package Spectre.Console
// dotnet add package spectre console
dotnet add package Spectre.Console
一旦安裝,這個程式庫可以讓您更容易在控制台應用程式中呈現資訊。 Tim還指出視頻提供了文檔和源代碼鏈接,供有興趣的觀眾參考進一步的示例。
創建您的第一個表格
Tim在0:35開始編寫代碼。他創建了一個Table對象:
var table = new Table();
var table = new Table();
然後他使用AddColumn添加了三個列:
table.AddColumn("First Name");
table.AddColumn("Last Name");
table.AddColumn("Age");
table.AddColumn("First Name");
table.AddColumn("Last Name");
table.AddColumn("Age");
這創建了基本結構。 他解釋說,每個列稍後都可以有自己的寬度、對齊和樣式。
接下來,他使用AddRow添加行。 Tim在1:06指出有三種支持的添加行方式:
-
IRenderable對象的params列表(用於嵌套項,如面板,另一個表格,甚至圖表)。
-
字符串的params列表(最常見)。
- IEnumerable
(較不常見但仍可用)。
他首先演示了第二種選擇,添加:
table.AddRow("Tim", "Corey", "46");
table.AddRow("Sue", "Storm", "23");
table.AddRow("Tim", "Corey", "46");
table.AddRow("Sue", "Storm", "23");
這將兩行數據放入表中。 在3:26,Tim提醒觀眾您必須使用AnsiConsole.Write(table)(而不是WriteLine)來顯示像表格這樣的IRenderable內容在終端中:
AnsiConsole.Write(table);
AnsiConsole.Write(table);
當他運行程序時,控制台會顯示一個整齊格式化的表格,標題和行自動對齊。 即使只有幾行代碼,Spectre也讓控制台輸出看起來更專業。

對齊和展開表格
在4:00,Tim展示了如何控制表格在螢幕上的位置。 例如:
table.Centered();
table.Centered();
這將在控制台視窗中間顯示整個表格。 他解釋說,這個設置影響的是整個表,而不是行。 您也可以將表格右對齊或左對齊。 默認為左對齊。

然後他在5:01演示table.Expand(),這使表格填滿整個終端視窗的寬度。 一旦展開,居中便沒有影響,因為表格現在占滿了所有可用空間。 默認為收縮狀態的表格。

添加邊框和理解終端支援
接下來,Tim在5:21添加了一個邊框:
table.Border(TableBorder.Rounded);
table.Border(TableBorder.Rounded);
他在Visual Studio的控制台中運行應用程序,發現角落不是圓角。 在5:54,他切換到Windows Terminal並重新運行 —— 現在出現了圓角。
Tim解釋道(5:59),渲染能力取決於您使用的終端。 底層的shell只是提供輸出,但終端決定它能顯示哪些樣式。 Windows Terminal支持圓角邊框字符; Visual Studio的集成控制台則不支持。 這同樣適用於顏色、標記或在文本中添加斜體、下劃線或粗體樣式的情況。
他在7:01展示,即使是Visual Studio外的開發者命令提示符也能正確渲染,因為它使用的是不同的終端。 如果您嘗試使用Spectre功能例如進度條、長時間運行的任務或表格,請記住這一點:不是所有的終端都能顯示每種樣式。
添加行分隔符
Tim還指出,您可以顯示行之間的分隔符以增加清晰度:
table.ShowRowSeparators();
table.ShowRowSeparators();
這會在每行之間畫一條水平線,這可以使更大表格中的信息更容易瀏覽 —— 特別是在您構建顯示大量輸出或動態處理參數的CLI工具時。
列級樣式:填充、寬度、對齊
Spectre.Console表格的一個優勢是您可以個別自定義每一列。 在8:02,Tim修改了第一列:
table.Columns[0].PadLeft(5).PadRight(5);
table.Columns[0].PadLeft(5).PadRight(5);
這在文字兩側加入填充。 然後他在第二列設置了固定寬度:
table.Columns[1].Width(15);
table.Columns[1].Width(15);
最後,他將該列的內容右對齊:
table.Columns[1].RightAligned();
table.Columns[1].RightAligned();
在9:10當他再次運行程序時,您可以看到第一列填充,第二列設為固定寬度,且內容右對齊。 即使是標題文字也遵循這些設置。 Tim指出(8:42),寬度以字符為單位,而不是像素。
這些小細節 —— 填充、對齊和固定的寬度 —— 使您的控制台應用程式更加易讀。 結合Spectre的顏色、標記和面板,您可以創建一個更接近GUI的輸出,但完全在控制台中運行。

從IEnumerable添加行
在9:25,Tim演示了第三種添加行的方法 —— 通過傳入IEnumerable
var person = new List<Text>
{
new Text("Bilbo"),
new Text("Baggins"),
new Text("111")
};
table.AddRow(person);
var person = new List<Text>
{
new Text("Bilbo"),
new Text("Baggins"),
new Text("111")
};
table.AddRow(person);
這使用集合插入了另一行。 Tim評論說在日常代碼中這個選項不是"非常有用",但如果您要從其他來源(如文件中的數據、單元測試框架或互動式提示)動態生成行,則它受到支援。

總結
在影片(9:59)的最後,Tim總結:Spectre.Console表格為您提供了很多力量以整潔和結構化的方式呈現資訊。 您可以控制表格的對齊、寬度和邊框樣式,添加行分隔符,應用列的填充,甚至嵌入面板或其他可渲染元素。
由於該程式庫深受現代CLI設計的啟發,它不僅支援表格,還支援長時間執行任務的進度指示器、圖表、用於粗體、斜體、下劃線和顏色(例如藍色或綠色文字)的標記等。 Tim鼓勵觀眾查看文檔並嘗試示例,看看Spectre如何使您的控制台輸出更具吸引力。
通過遵循Tim Corey的逐步演示,您將看到如何通過Spectre.Console輕鬆構建漂亮的控制台應用程式。 安裝NuGet套件,探索API,並立即開始將您的普通控制台輸出轉化為結構化、樣式化的顯示。
