青岛网站定做,优购物,最便宜的购物软件排名,网站开发所需的技术说到Windows的cmd#xff0c;刻板印象就是黑底白字的命令行界面。跟Linux花花绿绿的界面比#xff0c;似乎单调了许多。但其实C#开发的Console应用也可以摆脱单调非黑即白的UI。
最近遇到个需求#xff0c;要在一堆纯文本文件里找指定的关键字#xff08;后续还要人肉判断…说到Windows的cmd刻板印象就是黑底白字的命令行界面。跟Linux花花绿绿的界面比似乎单调了许多。但其实C#开发的Console应用也可以摆脱单调非黑即白的UI。
最近遇到个需求要在一堆纯文本文件里找指定的关键字后续还要人肉判断上下文。当然Windows自带的搜索功能就可以但还是想进一步提高直观性在一个界面里先行预览。实现这个需求非常简单总体思路就是用DirectoryInfo和FileInfo需要using System.IO搜索指定目录下特定后缀的文本文件然后File.ReadAllLine获取文件内容再逐行分析有没有指定的关键字有就输出文件名、行号、当前行的完整内容。从方便用户的角度关键字高亮是个好特性所以就引出了Console应用的化妆问题。好在实现起来超级简单只需要在适当的位置使用Console.ForegroundColor以及Console.BackgroundColor即可。实现高亮功能的核心示例代码如下 /// summary/// 设置控制台颜色/// /summary/// param namefc前景色/param/// param namebc背景色/paramstatic void SetColor(ConsoleColor fc, ConsoleColor bc){Console.ForegroundColor fc;Console.BackgroundColor bc;}/// summary/// 设置控制台默认颜色/// /summarystatic void SetDefaultColor(){// 前景灰白色, 背景黑色SetColor(ConsoleColor.Gray, ConsoleColor.Black);}/// summary/// 控制台应用中高亮显示关键字/// /summary/// param nametext文本全文/param/// param namekeyword关键字/param/// param namefc前景色/param/// param namebc背景色/paramstatic void ConsoleShow(string text, string keyword, ConsoleColor fc, ConsoleColor bc){//string[] parts text.Split(new string []{ keyword },StringSplitOptions.None);string[] parts Regex.Split(text, keyword, RegexOptions.IgnoreCase);for (int i 0; i parts.Length - 1; i){SetDefaultColor();Console.Write(parts[i]);SetColor(fc, bc);Console.Write(keyword.Trim());}SetDefaultColor();Console.Write(parts[parts.Length - 1]);Console.WriteLine();}
实现高亮的核心思路是以关键字为分隔符做字符串拆分分隔符前的文字用默认颜色展示分隔符本身用高亮颜色展示分隔符后的再用默认。上面的代码只是示例性的细节上还有点小bug。 演示效果如下