GVKun编程网logo

可以使用Console.Clear仅清除一行而不是整个控制台吗?(可以用命令或是菜单清除命令窗口中的内容)

17

如果您想了解可以使用Console.Clear仅清除一行而不是整个控制台吗?和可以用命令或是菜单清除命令窗口中的内容的知识,那么本篇文章将是您的不二之选。我们将深入剖析可以使用Console.Clea

如果您想了解可以使用Console.Clear仅清除一行而不是整个控制台吗?可以用命令或是菜单清除命令窗口中的内容的知识,那么本篇文章将是您的不二之选。我们将深入剖析可以使用Console.Clear仅清除一行而不是整个控制台吗?的各个方面,并为您解答可以用命令或是菜单清除命令窗口中的内容的疑在这篇文章中,我们将为您介绍可以使用Console.Clear仅清除一行而不是整个控制台吗?的相关知识,同时也会详细的解释可以用命令或是菜单清除命令窗口中的内容的运用方法,并给出实际的案例分析,希望能帮助到您!

本文目录一览:

可以使用Console.Clear仅清除一行而不是整个控制台吗?(可以用命令或是菜单清除命令窗口中的内容)

可以使用Console.Clear仅清除一行而不是整个控制台吗?(可以用命令或是菜单清除命令窗口中的内容)

在为学校设计问题/答案程序时,我想到可以Console.Clear()擦除屏幕上的所有内容。我想知道我是否可以使用Console.Readline(valueOne),然后只输出答案而没有问题。如果我只问一个问题,那就行了Console.Clear

我有几个问题,它们的值不参考,如果可能的话,要消除。我想省略问题,只显示几个答案。我认为,如果我存储答案,则可以Console.Clear()Console.WriteLine()使用三个变量。我可以做这样的事情:

Console.WriteLine("Value 1 is: {0:c}" + "Value 2 is: {1:c}" + "Value 3 is: {2:c}, valueOne, valueTwo, valueThree).

使用引用更容易解决问题,因为可以存储和检索值。如果我仅使用方法传递值并输出值,main()则不会引用这些值来清除并再次输出。这就是为什么我想问我是否可以问一个问题,然后删除一行并仅输出答案的原因。

我只是想了解可能性,而不是尝试设置程序。我想知道从参考值和按值输出值的能力,而无需额外的输出问题。

答案1

小编典典

描述

您可以使用该Console.SetCursorPosition功能转到特定的行号。比起您可以使用此功能清除线

public static void ClearCurrentConsoleLine(){    int currentLineCursor = Console.CursorTop;    Console.SetCursorPosition(0, Console.CursorTop);    Console.Write(new string('' '', Console.WindowWidth));     Console.SetCursorPosition(0, currentLineCursor);}

样品

Console.WriteLine("Test");Console.SetCursorPosition(0, Console.CursorTop - 1);ClearCurrentConsoleLine();

更多信息

  • Console.SetCursorPosition方法

.NET Core创建一个控制台(Console)程序

.NET Core创建一个控制台(Console)程序

.NET Core版本:1.0.0-rc2

Visual Studio版本:Microsoft Visual Studio Community 2015 Update 2

开发及运行平台:Windows 7 专业版 Service Pack 1

新增一个控制台项目(ConsoleLogApp)

project.json文件中新增依赖项

{
 "version": "1.0.0-*",
 "buildOptions": {
  "emitEntryPoint": true
 },

 "dependencies": {
  "Microsoft.NETCore.App": {
   "type": "platform",
   "version": "1.0.0-rc2-3002702"
  },
  "Microsoft.Extensions.DependencyInjection": "1.0.0-rc2-final",
  "Microsoft.Extensions.Logging": "1.0.0-rc2-final",
  "Microsoft.Extensions.Logging.Console": "1.0.0-rc2-final",
  "Microsoft.Extensions.Configuration.Json": "1.0.0-rc2-final",
  "System.Text.Encoding": "4.0.11-rc2-24027",
  "System.Text.Encoding.CodePages": "4.0.1-rc2-24027"
 },

 "frameworks": {
  "netcoreapp1.0": {
   "imports": "dnxcore50"
  }
 }
}

新增日志输出配置文件(log.json)

我们这个控制台程序主要目的是用来打印输出日志,所以这里用一个单独的日志配置文件来保存相关日志相关选项,比如:是否包括上下文,日志输出最低等级等。

{
 "IncludeScopes": false,
 "LogLevel": {
  "App": "Warning"
 }
}

IncludeScopes为false让控制台日志输出时不包含上下文;LogLevel的最低等级设置为:Warning,只有高于这个级别的日志才会输出。App为日志的CategoryName。

入口程序

using System;
using Microsoft.Extensions.Configuration;
using System.Text;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;

namespace ConsoleLogApp
{
  public class Program
  {
    public static void Main(string[] args)
    {
      // 支持中文编码
      Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

      // 加载日志配置文件
      var setttins = new ConfigurationBuilder().AddJsonFile("log.json").Build();

      // 创建ConsoleLogProvider并根据日志类目名称(CategoryName)生成Logger实例
      var logger = new ServiceCollection().AddLogging().BuildServiceProvider().GetService<ILoggerFactory>().AddConsole(setttins).CreateLogger("App");

      // 设置事件ID
      const int eventId = 888888;

      // 输出正常提示日志
      logger.LogInformation(eventId, "订单号({OderNo})", "12345678000");

      // 输出警示日志
      logger.LogWarning(eventId, "待处理订单数达到5分钟内的预警值:{max}", 2000);

      // 输出错误日志
      logger.LogError(eventId, "数据库连接超时");

      Console.ReadLine();
    }
  }
}

使用“dotnet restore”来还原依赖项

在Git Bash中把当前目录切换到项目的根目录下(本例为:D:\ConsoleLogApp)

dotnet restore命令是用来寻找当前目录下的项目文件(project.json),然后利用NuGet库还原整个项目的依赖库,然后遍历每个目录生成项目文件,继续还原该项目文件中依赖项。

使用“dotnet build”来编译整个项目

编译成功后,我们在项目根目录下的bin目录中发现编译后的文件夹(D:\ConsoleLogApp\bin\Debug\netcoreapp1.0),命令执行成功后生成了一个Debug目录并在此目录下生成了一个以应用名称命名的文件夹(netcoreapp1.0,这个名称是在project.json中配置的)

使用“dotnet run”来运行程序

我们可以看到info级别的输出日志被过滤掉了,只有Warning以上的日志被输出了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

您可能感兴趣的文章:
  • ASP.NET Core自定义本地化教程之从文本文件读取本地化字符串
  • win10下ASP.NET Core部署环境搭建步骤
  • .NET Core Windows环境安装配置教程
  • 简单谈谈.NET Core跨平台开发
  • 详解ASP.NET Core Token认证
  • ASP.NET Core配置教程之读取配置信息
  • .NET Core中本地化机制的深入讲解

.NET Core控制台应用ConsoleApp读取appsettings.json配置文件

.NET Core控制台应用ConsoleApp读取appsettings.json配置文件

准备

  • Visual Studio 2017
  • .NET Core 2.1

新建控制台应用(.NET Core)

默认的 Program.cs

// Program.cs
using System;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
        }
    }
}

新建 appsettings.json

我们需要从指定的配置文件中读取配置内容,因此我们新建一个配置文件.

右键项目 - 添加新项,我们新建一个叫做 appsettings.json 的文件

修改 appsettings.json 文件内容如下:

{
  "ConnectionStrings": {
    "DefaultConnectionString":  "Data Source=localhost;Database=db;User ID=user;Password=pwd"
  }
}

并调整 appsettings.json 文件属性,以便每次编译时能自动把配置拷贝到程序目录

安装依赖库

我们需要读取 appsettings.json 配置文件,因此安装如下依赖库

PM> Install-Package Microsoft.Extensions.Configuration -Version 2.1.1 -Verbose
PM> Install-Package Microsoft.Extensions.Configuration.Json -Version 2.1.1 -Verbose

修改后的 Program.cs

// Program.cs
using Microsoft.Extensions.Configuration;
using System;
using System.IO;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            IConfigurationRoot configuration = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile(path: "appsettings.json", optional: true, reloadOnChange: true)
                .Build();

            string defaultConnectionString = configuration.GetConnectionString("DefaultConnectionString");

            Console.WriteLine(defaultConnectionString);
            Console.ReadKey();
        }
    }
}

这个时候, 我们可以编译&启动看看效果,如下:

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。

您可能感兴趣的文章:
  • .NetCore获取Json和Xml格式的配置信息
  • .Net Core 配置文件读取IOptions,IOptionsMonitor,IOptionsSnapshot
  • .net6 使用Senparc开发小程序配置过程
  • .NET Core自定义配置文件
  • .NET Core读取配置文件
  • .NET 中配置从xml转向json方法示例详解

Beanstalk 队列服务器控制台 Aurora-Console

Beanstalk 队列服务器控制台 Aurora-Console

aurora 是一个 Golang 编写的基于 Web 的 Beanstalk 消息队列服务器管理工具,单文件无需依赖其他组件,支持管理本地和远程多个队列服务器。

项目地址

github.com/xuri/aurora

特点

  • 跨平台支持 macOS/Linux/Windows 32/64-bit

  • 单文件简单易部署

  • 不依赖其他组件

  • 支持读取配置文件方式启动 + 登陆用户认证

  • 定时刷新 Beanstalk 队列服务器状态

  • 对每个 Tube 的 ready/delayed/buried 状态进行管理

  • 支持批量清空 Tube 中的 Job

  • 支持 Job 文本高亮显示

  • 支持 Job 模糊搜索

  • 自定义队列服务器状态监控项

界面截图

  • Beanstalk 服务器列表

  • Tube 管理页面

c# 控制台console进度条

c# 控制台console进度条

1 说明

笔者大多数的开发在 Linux 下,多处用到进度条的场景,但又无需用到图形化界面,所以就想着弄个 console 下的进度条显示。

2 步骤

  1. 清行显示

    //清行处理操作
    int currentLineCursor = Console.CursorTop;//记录当前光标位置
    Console.SetCursorPosition(0, Console.CursorTop);//将光标至于当前行的开始位置
    Console.Write(new string('' '', Console.WindowWidth));//用空格将当前行填满,相当于清除当前行
    Console.SetCursorPosition(0, currentLineCursor);//将光标恢复至开始时的位置
    

    如果要清除上一行,只需在清行处理操作前将调整光标位置提前一行,即:Console.SetCursorPosition(0, Console.CursorTop - 1);。紧接着Console.WriteLine(/*something*/);,即可实现在控制台末尾行重复输出。

  2. 多线程下的输出显示

    多线程下最容易出现的问题就是一个线程的输出覆盖其他线程的输出,或者是一个线程紧跟着上一个线程输出而没有换行,这些情况多会导致输出的混乱。为了,解决这样的问题,特意实现一个专门的输出类来进行输出显示:

     public class Consoler
     {
         private static string lastContext = "";//用于记录上次写的内容
         private static readonly object _lock = new object();//加锁保证只有一个输出
         public static void Write(string context)
         {
             lastContext = context;//记录上次写的内容
             lock (_lock)
             {
                 Console.Write(context);
             }
    
         }
         /// <summary>
         /// 覆写
         /// </summary>
         /// <param name="context"></param>
         public static void OverWrite(string context = null)
         {
             lastContext = context;//记录上次写的内容
             var strLen = context?.Length ?? 0;
             //空白格的长度,考虑到内容可能超出一行的宽度,所以求余。
             var blankLen = Console.WindowWidth - strLen % Console.WindowWidth - 1;
             var rowCount = strLen / Console.WindowWidth;
             Console.SetCursorPosition(0, Console.CursorTop - rowCount);
             //空白只需填充最后一行的剩余位置即可。
             lock (_lock)
             {
                 Console.Write(context + new string('' '', blankLen));
             }
         }
    
         public static void WriteLine(string context = null)
         {
             ClearConsoleLine();//清除最后一行
             lock (_lock)
             {
                 Console.WriteLine(context);
                 if (!string.IsNullOrWhiteSpace(lastContext))
                     Console.Write(lastContext);//重新输出最后一次的内容,否则有较明显的闪烁
                 lastContext = null;
             }
         }
    
         public static void ClearConsoleLine(int invertedIndex = 0)
         {
             int currentLineCursor = Console.CursorTop;
             int top = Console.CursorTop - invertedIndex;
             top = top < 0 ? 0 : top;
             Console.SetCursorPosition(0, top);
             Console.Write(new string('' '', Console.WindowWidth - 1));
             Console.SetCursorPosition(0, currentLineCursor);
         }
     }
    

    实际测试时,使用多 Task (模拟多线程)去进行输出实验:

    static void Main(string[] args)
     {
         Console.WriteLine("Hello World!");
    
         var task1 = Task.Run(() =>
         {
             int count = 0, w, lw, rw;
             float p = 0;
             while (true)
             {
                 w = (int)(Console.WindowWidth * 0.6);
                 count %= 75;
                 p = count++ / 74f;
                 lw = (int)(p * w);
                 rw = w - lw;
                 Consoler.OverWrite($"from task1, [{new string(''#'', lw) + new string('' '', rw)}]:{p:#.00%}");
                 Thread.Sleep(100);
             }
         });
         var task2 = Task.Run(() =>
         {
             while (true)
             {
                 Consoler.WriteLine($"from task2, now:{DateTime.Now}");
                 Thread.Sleep(5000);
             }
         });
    
         var task3 = Task.Run(() =>
         {
             var rd = new Random();
             while (true)
             {
                 Consoler.WriteLine($"from task3, {new string(''+'', (int)(rd.NextDouble() * Console.WindowWidth))}");
                 Thread.Sleep(rd.Next(5000));
             }
         });
         Task.WaitAll(task1);
     }
    

    最终输出结果:

     from task2, now:6/5/19 8:10:24 PM
     from task3, +++++++++++++++++++++++++++++++++
     from task2, now:6/5/19 8:10:29 PM
     from task3, +++++++++++++++++++++++++
     from task3, ++++
     from task2, now:6/5/19 8:10:34 PM
     from task3, +++++++++++++++++++++++
     from task3, ++++++++++++
     from task3, ++++++
     from task2, now:6/5/19 8:10:44 PM
     from task1, [###########################                     ]:58.11%
    

    task1 用来进行进度条的输出,task2 和 task3 进行随机输出。可以看出,task1 永远在最后一行进行进度更新,其他输出任然可以正常进行。实现的效果和 ubuntu 下执行更新命令sudo apt-get update的输出类似。

  3. 总结

    虽然该例子是在 c#下完成的,但在 python,c,java 中通用。为了保证输出的有序性,程序中加了锁,影像了多线程的效率,但是对于界面显示是足够的。如果需要高性能,那么考虑使用类似于队列式的异步更新输出显示的方法。

原文出处:https://www.cnblogs.com/hsxian/p/10975784.html

今天关于可以使用Console.Clear仅清除一行而不是整个控制台吗?可以用命令或是菜单清除命令窗口中的内容的介绍到此结束,谢谢您的阅读,有关.NET Core创建一个控制台(Console)程序、.NET Core控制台应用ConsoleApp读取appsettings.json配置文件、Beanstalk 队列服务器控制台 Aurora-Console、c# 控制台console进度条等更多相关知识的信息可以在本站进行查询。

本文标签: