基于控制台格式化代码的格式化字符串

2024-04-27

如何使用格式化代码格式化字符串以获得 Windows cmd 的格式化字符串?


所以基本上我有一个像这样的字符串~b~Hello World~r~.

当我将其输出到 cmd 时,它应该显示为<blue from here on>Hello World<reset to normal>.


据我所知,cmd 有一些 Unicode 字符来更改以下文本格式,但我不记得它们(比如\u00234)


所以我想到的是:

public string FormatString(string input)
{
    input = Regex.Replace(input, "~b~", "<unicode for blue>", RegexOptions.IgnoreCase);
    input = Regex.Replace(input, "~r~", "<Unicode for reset>", RegexOptions.IgnoreCase);
    return input;
}

据我所知,Windows控制台应用程序(例如cmd.exe)中没有此类控制代码。有一些创造性的方法可以达到类似的结果。其中之一是如何在 Windows 命令行中用不同的颜色进行回显 https://stackoverflow.com/questions/2048509/how-to-echo-with-different-colors-in-the-windows-command-line。我出于好奇尝试了一下,效果很好。它使用了一些 jscript 魔法。对于日常使用,如果您需要转义代码格式化功能,您可能会发现 bash shell 模拟器之一更有用。 (如何在Windows上使用类Linux Shell(bash)进行开发? https://stackoverflow.com/questions/12293494/how-to-develop-in-linux-like-shell-bash-on-windows)

UPDATE:

我将一些非常快速和肮脏的东西放在一起,以演示一种使用“代码”的方法,其风格类似于您在问题中使用的风格。这可能不是“最好”的方式。但这可能会激发一个想法。

class Program
{
    static void Main(string[] args)
    {
        @"
This is in ~r~red~~ and this is in ~b~blue~~. This is just some more text 
to work it out a bit. ~g~And now a bit of green~~.
".WriteToConsole();
        Console.ReadKey();
    }
}

static public class StringConsoleExtensions
{
    private static readonly Dictionary<string, ConsoleColor> ColorMap = new Dictionary<string, ConsoleColor>
    {
        { "r", ConsoleColor.Red },
        { "b", ConsoleColor.Blue },
        { "g", ConsoleColor.Green },
        { "w", ConsoleColor.White },
    };
    static public void WriteToConsole(this string value)
    {
        var position = 0;
        foreach (Match match in Regex.Matches(value, @"~(r|g|b|w)~([^~]*)~~"))
        {
            var leadingText = value.Substring(position, match.Index - position);
            position += leadingText.Length + match.Length;
            Console.Write(leadingText);
            var currentColor = Console.ForegroundColor;
            try
            {
                Console.ForegroundColor = ColorMap[match.Groups[1].Value];
                Console.Write(match.Groups[2].Value);
            }
            finally
            {
                Console.ForegroundColor = currentColor;
            }
        }
        if (position < value.Length)
        {
            Console.Write(value.Substring(position, value.Length - position));
        }
    }
}

我认为可能有一种方法可以让正则表达式捕获前导文本。但我没有太多时间去尝试。我很想看看是否有一种模式可以让正则表达式完成所有工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基于控制台格式化代码的格式化字符串 的相关文章

  • 找到的程序集的清单定义与程序集引用不匹配

    我试图在 C Windows 窗体应用程序 Visual Studio 2005 中运行一些单元测试 但出现以下错误 System IO FileLoadException 无法加载文件或程序集 实用程序 版本 1 2 0 200 文化 中
  • 如何在不实例化一个类的情况下检查它是否继承了另一个类? [复制]

    这个问题在这里已经有答案了 假设我有一个如下所示的类 class Derived some inheritance stuff here 我想在我的代码中检查类似的内容 Derived is SomeType 但看起来像is运算符需要 De
  • 单线程公寓问题

    从我的主窗体中 我调用以下命令来打开一个新窗体 MyForm sth new MyForm sth show 一切都很好 但是这个表单有一个组合框 当我将其 AutoCompleteMode 切换为建议和追加时 我在显示表单时遇到了这个异常
  • 我可以仅在少数情况下关闭模拟吗

    我有一个始终使用模拟的应用程序 但是 当用户以管理员身份登录时 一些操作需要他们写入服务器本身 现在 如果这些用户在实际服务器上没有权限 有些用户没有 则不会让他们写入 我想做的是关闭几个命令的模拟 有没有办法做这样的事情 using Ho
  • 操纵 setter 以避免 null

    通常我们有 public string code get set 如果最终有人将代码设置为 null 我需要避免空引用异常 我尝试这个想法 有什么帮助吗 public string code get set if code null cod
  • 如何添加重试以调用 Web 服务?

    我有一个应用程序调用使用 wsHttpBinding 的 Web 服务 我需要在连接超时等情况下对 Web 服务调用实现某种重试功能 执行此操作的最佳方法是什么 我已经阅读过有关 WS ReliableMessaging 的内容 但这不是
  • 日期时间的自定义 JavaScriptConverter?

    我有一个对象 它有一个 DateTime 属性 我想通过 AJAX JSON 将该对象从 ashx 处理程序传递回网页 我不想使用第 3 方控件 当我这样做时 new JavaScriptSerializer Serialize DateT
  • dropdownlist DataTextField 由属性组成?

    有没有一种方法可以通过 C 使 asp net 中的下拉列表的 datatextfield 属性由对象的多个属性组成 public class MyObject public int Id get set public string Nam
  • 如何用 C 语言练习 Unix 编程?

    经过五年的专业 Java 以及较小程度上的 Python 编程并慢慢感觉到我的计算机科学教育逐渐消失 我决定要拓宽我的视野 对世界的一般用处 并做一些 对我来说 感觉更重要的事情就像我真的对机器有影响一样 我选择学习 C 和 Unix 编程
  • 系统错误 124 - SHFileOperation 的 ERROR_INVALID_LEVEL

    我在使用时遇到问题SHFileOperation SHFileOperation SHFILEOPSTRUCT https stackoverflow com questions 9191415 shfileoperation shfile
  • 从事务范围调用 WCF 服务方法

    我有这样的代码 using TransactionScope scope TransactionScopeFactory CreateTransactionScope some methodes calls for which scope
  • 错误左值需要作为赋值C++的左操作数

    整个程序基本上只允许用户移动光标 如果用户位于给定的坐标范围 2 2 内 则允许用户键入输入 我刚刚提供了一些我认为足以解决问题的代码 我不知道是什么导致了这个问题 你能解释一下为什么会发生吗 void goToXY int int 创建一
  • 如何访问窗口?

    我正在尝试使用其句柄访问特定窗口 即System IntPtr value Getting the process of Visual Studio program var process Process GetProcessesByNam
  • #pragma pack(16) 和 #pragma pack(8) 的效果总是相同吗?

    我正在尝试使用来对齐数据成员 pragma pack n http msdn microsoft com en us library 2e70t5y1 28v vs 100 29 aspx 以下面为例 include
  • 纯虚函数可能没有内联定义。为什么?

    纯虚函数是那些虚函数并且具有纯说明符 0 第 10 4 条第 2 款C 03 的内容告诉我们什么是抽象类 顺便说一句 如下 注意 函数声明不能 同时提供纯说明符和定义 尾注 示例 struct C virtual void f 0 ill
  • 为什么使用 HTTP 动词?

    因为动词的目标是像 server domain getallrecords 或 server domain delete1record 或类似的 URL 而getallrecords delete1record都是专门为特定目的而设计的 为
  • System.IO.Compression 和 ZipFile - 提取并覆盖

    我使用标准 VB NET 库来提取和压缩文件 它也可以工作 但是当我必须提取并且文件已经存在时 问题就出现了 我使用的代码 Imports Imports System IO Compression 崩溃时我调用的方法 ZipFile Ex
  • 如何设置 CMake 与 clang 交叉编译 Windows 上的 ARM 嵌入式系统?

    我正在尝试生成 Ninja makefile 以使用 Clang 为 ARM Cortex A5 CPU 交叉编译 C 项目 我为 CMake 创建了一个工具链文件 但似乎存在错误或缺少一些我无法找到的东西 当使用下面的工具链文件调用 CM
  • 启动画面后主窗口出现在其他窗口后面

    我有一个带有启动屏幕的 Windows 窗体应用程序 当我运行该应用程序时 启动屏幕显示正常 消失并加载应用程序的主窗体 但是 当我加载主窗体时 它出现在包含该应用程序的 Windows 资源管理器目录下 这是运行启动画面然后运行主窗体的代
  • FindAsync 很慢,但是延迟加载很快

    在我的代码中 我曾经使用加载相关实体await FindAsync 希望我能更好地遵守 C 异步指南 var activeTemplate await exec DbContext FormTemplates FindAsync exec

随机推荐