吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1084|回复: 5
收起左侧

[经验求助] C# 控制台显示数据,并用规定符号把这些数据框起来

[复制链接]
夜雨闻笛 发表于 2024-4-5 20:10
25吾爱币
我想用C#写一个控制台展示效果的方法,具体显示造型如下:
------------------|效果图|------------------
┆  展示的某些数据1……(长度不定)     ┆
┆  数据2……(长度不定)                       ┆
┆  3……(长度不定)                              ┆
┆  展示的某些数据4……(长度不定)     ┆
┆  某些数据5…(长度不定)                  ┆
┆  展示的某些数据6……(长度不定)     ┆
┆  展示的某些数据7……(不定)            ┆
------------------|效果图|------------------


里面的内容长度是不等的,不需要什么特别的对齐方式。
唯一的要求就是外面的边框要统一。就像一张纸上写了很多东西,不能因为某一行没写满,就把那一行多余的纸裁掉,而是那一行的纸的边框依然和其他行的边框在同样的垂直线上。
我的思路是如果每一行不足指定长度,我就用空格补齐这一行数据。
结果代码走下来歪扭七八的,每行的外边框位置都不一样。稍微差一点就会搞得不对齐,我也不知道为什么会这样。
希望大佬帮帮忙,看看这样的效果图怎么做出来。不一定要按我写的代码优化,如果有好的写法完全可以重新写。
请大佬教我。
蟹蟹。


[C#] 纯文本查看 复制代码
public static void 测试(某个需要显示效果的类 q,int 每行最大长度=16)
{
StringBuilder 字符串 = new();
    string 每行最左侧间距 = "  ";
    string 两侧添加符 = "┆";
    字符串.AppendLine("-----|效果图|-----");
    //这里要添加传入的形参类的许多字段,为了节约帖子篇幅,就只写一个示范了
    for (int i = 0; i < q.仓库金属.Length; i++)
    {
        string 临时字符组 = "";
        string 预留空格 = "";
        临时字符组 += $"{两侧添加符}{每行最左侧间距}";//首先把每行的左侧统一符号和空格写出
        临时字符组 += $"{q.仓库金属[i]}:{q.金属吨数[i]:f1}吨";//然后在后面写入需要写入的数据
for (int j = 每行最大长度 - 临时字符组.Length; j < 每行最大长度; j++)
{
    //得出字符长度和限定长度之间的差值,不足的用空格补足
    预留空格 += " ";
}        临时字符组 += $"{预留空格}";//将补上的空格放入字符组里
        //通过上面几步,现在的一行数据应该是统一的规定长度了,最后再本行结尾加上规定符号
        临时字符组 += $"{两侧添加符}";
        字符串.AppendLine($"{临时字符组}");
    }
    //……添加其他数据

    字符串.AppendLine("-----|效果图|-----");
    Console.WriteLine(字符串);
}

最佳答案

查看完整内容

控制台有个SetCursorPosition [mw_shl_code=csharp,true] string[] data = {"展示的某些数据1", "数据2非常非常长", "3", "展示的某些数据4……"}; const string DIVIDER = "------------------|效果图|------------------"; Console.WriteLine(DIVIDER); int end = 44 - 1; // 这里改成计算每行最大字符查高度,减去最后一个"|" int i = 0; for ...

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

flyer_2001 发表于 2024-4-5 20:10
控制台有个SetCursorPosition
[C#] 纯文本查看 复制代码
 
           string[] data = {"展示的某些数据1", "数据2非常非常长", "3", "展示的某些数据4……"};
            const string DIVIDER = "------------------|效果图|------------------";
            Console.WriteLine(DIVIDER);
            int end = 44 - 1;  // 这里改成计算每行最大字符查高度,减去最后一个"|"
            int i = 0;
            foreach (var item in data)
            {
                i++;
                Console.Write(String.Format("| {0} ", item)); 
                // 设置光标位置到指定的X和Y坐标
                Console.SetCursorPosition(end, i);
                Console.WriteLine("|");
            }
            Console.WriteLine(DIVIDER);
            Console.ReadKey();
3yu3 发表于 2024-4-6 17:16
 楼主| 夜雨闻笛 发表于 2024-4-6 17:50
3yu3 发表于 2024-4-6 17:16
不应该是用tab补空吗?

是  \t 吗?
\t也不行,而且\t的间隔特别大,多加几个就直接飙到整列的最后去了.
这是我自己测试的,不确定是否正确,如果大佬你有想法,可以测一下看看。如果好用就给我康康代码。
 楼主| 夜雨闻笛 发表于 2024-4-9 14:01
flyer_2001 发表于 2024-4-7 02:01
控制台有个SetCursorPosition
[mw_shl_code=csharp,true]
           string[] data = {"展示的某些数据 ...

今天才有空来论坛,一来就看到了大佬的回答,测试了一下完美解决,蟹蟹大佬。
flyer_2001 发表于 2024-4-9 15:39
补空格的方法也可以,需要注意,一个汉字占两个字符
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-16 02:39

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表