首页 > 其他分享 >分享一个把表格类型的数据转换成字符串,以表格样式输出,方便控制台和日志记录时更直观

分享一个把表格类型的数据转换成字符串,以表格样式输出,方便控制台和日志记录时更直观

时间:2024-12-20 15:46:35浏览次数:3  
标签:string 表格 int item lst 字符串 new 控制台 日志

调用实例:

Console.WriteLine("Hello, World!");


List<string[]> tabLog = new List<string[]>();
tabLog.Add(new string[] { "编号", "姓名", "性别", "年龄","备注" });
tabLog.Add(new string[] { "1", "张三", "男", "12","这个地方的数据可能很长" });
tabLog.Add(new string[] { "2", "李四", "不清不楚的", "15", "这个地方的数据可能很长很长" });
tabLog.Add(new string[] { "3", "王五", "女", "10" ,"短了"});

var strLog = TableDataToStr(tabLog.ToArray());

Console.WriteLine(strLog);

依赖方法:

        /// <summary>
        /// 根据asc码来判断字符串的长度,在0~127间字符长度加1,否则加2
        /// </summary>
        /// <returns>需要返回长度的字符串 </returns>
        public static int TrueLength(string str)
        {
            int lenTotal = 0;
            int n = str.Length;
            string strWord = "";  //清空字符串
            int asc;
            for (int i = 0; i < n; i++)
            {
                strWord = str.Substring(i, 1);
                asc = Convert.ToChar(strWord);
                if (asc < 0 || asc > 127)      // 在0~127间字符长度加1,否则加2
                {
                    lenTotal = lenTotal + 2;
                }
                else
                {
                    lenTotal = lenTotal + 1;
                }
            }
            return lenTotal;
        }

        /// <summary>
        /// 统一字符串的长度
        /// <param name="strOriginal">初始字符串</param>
        /// <param name="maxTrueLength">规定统一字符串的长度</param>
        /// </summary>
        ///  <returns>返回统一后的字符串</returns>
        public static string PadRightTrueLen(string strOriginal, int maxTrueLength)
        {
            const char chrPad = ' ';
            string strNew = strOriginal;
            if (strOriginal == null || maxTrueLength <= 0)
            {
                strNew = "";
                return strNew;
            }
            int trueLen = TrueLength(strOriginal);
            if (trueLen < maxTrueLength)
            {
                // 填充  小于规定长度 用' '追加,直至等于规定长度
                for (int i = 0; i < maxTrueLength - trueLen; i++)
                {
                    strNew += chrPad.ToString();
                }
            }
            else
            {
                throw new Exception("当前的长度大于了最大的长度maxTrueLength");
            }
            return strNew;
        }

        /// <summary>
        /// 表格数据转字符串
        /// </summary>
        /// <param name="table"></param>
        /// <returns></returns>
        public static string TableDataToStr(string[][] table)
        {
            bool createGap = false;
        reset:
            List<Tuple<int, int, StringBuilder, int>> lst = new List<Tuple<int, int, StringBuilder, int>>();
            for (int i = 0, length = table.Length; i < length; i++)
            {
                string[] r = table[i];
                for (int j = 0, length2 = r.Length; j < length2; j++)
                {
                    var cell = new StringBuilder(r[j]);
                    int tl = TrueLength(cell.ToString());
                    lst.Add(new Tuple<int, int, StringBuilder, int>(i, j, cell, tl));
                }
            }
            if (!createGap)
            {
                // 最长的列追加间隙
                foreach (var item in lst)
                {
                    var max = lst.Where(c => c.Item2 == item.Item2).OrderByDescending(c => c.Item4).First();
                    if (item.Item4 == max.Item4)
                    {
                        table[item.Item1][item.Item2] = $"{item.Item3.ToString()}   ";
                    }
                }
                createGap = true;
                goto reset;
            }
            foreach (var item in lst)
            {
                var max = lst.Where(c => c.Item2 == item.Item2).OrderByDescending(c => c.Item4).First();
                if (item.Item4 < max.Item4)
                {
                    var old = item.Item3.ToString();
                    item.Item3.Clear();
                    item.Item3.Append(PadRightTrueLen(old, max.Item4));
                }
            }
            StringBuilder str = new StringBuilder();
            for (int i = 0, length = table.Length; i < length; i++)
            {
                string[] r = table[i];
                for (int j = 0, length2 = r.Length; j < length2; j++)
                {
                    str.Append(lst.First(c => c.Item1 == i && c.Item2 == j).Item3.ToString());
                }
                if (i != length - 1)
                {
                    str.AppendLine();// 换行
                }
            }
            return str.ToString();
        }
View Code

 

标签:string,表格,int,item,lst,字符串,new,控制台,日志
From: https://www.cnblogs.com/xuling-297769461/p/18619404

相关文章

  • 日志过量优化
    背景有两个B端服务,因为不好的日志习惯,无效日志量过大,日志经常被自动覆盖,只能存几天,导致排查问题困难,针对此,做了下无效日志的清理优化,本身没什么技术含量,但是操作起来比较恶心。这个问题的关键是对于一个复杂的B端项目,每天百G的文件里量,如何找到无效日志。首先,查看日志文件......
  • python 日志装饰器@logexecution 用法及案例
    在Python中,日志装饰器(@logexecution)是一种用于在函数或方法执行前后自动记录日志的装饰器。这种装饰器对于调试、监控和审计代码执行非常有用。下面是一个简单的日志装饰器的实现及其用法案例:日志装饰器实现importloggingimportfunctools#配置日志记录器(可选,但通常建议这......
  • 微信小程序、H5、Web 和 App 是不同的移动应用开发和部署形式。每种形式都有其特定的
    微信小程序、H5、Web和App是不同的移动应用开发和部署形式。每种形式都有其特定的技术架构、使用场景和优缺点。以下是这些平台的详细对比,按关键因素表格化:对比维度微信小程序H5WebNativeApp平台支持微信平台(需安装微信)任何支持浏览器的设备(手机、PC、平板等)......
  • 系统日志调试
    本文内容转载:https://www.landui.com/docs-4639为防掉失复制一份为应用程序池“XXX”提供服务的进程在与WindowsProcessActivationService通信时出现严重错误。该进程ID为“XXXX”。数据字段包含错误号。症状   日志中大量报错,IIS严重错误,此类错误默认情况下5......
  • Python语言编写多表格批量合并思路
    运用Python语言,可将同一文件夹下的多个表格整合为一个,可避免人工重复性工作,且提高准确性。实现数据的高效汇聚与统一管理,充分彰显Python在数据处理领域的卓越效能与便捷特性。的第一步,精准地选定即将开展表格合并操作所对应的目标文件夹,此文件夹作为整个数据整合的基础数......
  • Springboot logback 日志打印配置文件,每个日志文件100M,之后滚动到下一个日志文件,日
    全部配置logback.xml<?xmlversion="1.0"encoding="UTF-8"?><configurationdebug="false"><propertyname="LOG_HOME"value="log"/><propertyname="LOG_NAME"value="......
  • MySQL的日志机制
    MySQL日志机制随笔(redolog、binlog、undolog)redolog相关作用:保证数据库的恢复能力,数据库崩溃了,能使用redolog恢复数据是什么?redolog是物理日志,记录的是哪个数据页哪个字段被哪个事务改变了,速记:redolog是一种写前日志,先写redolog,等到数据库闲的时候再去写数据库文件redolog是......
  • C#使用log4net和sqlite数据库记录日志
    1安装包两个包:log4netSystem.Data.SQLite第二个包也可以使用Microsoft.Data.Sqlite,查到的资料显示如果环境使用的是.NETCore或.NET5+,则建议使用Microsoft.Data.Sqlite。但是我并没有测试第二个包,可能使用上有区别。2下载Sqlite如果本地没有sqlite环境的话,需要先下......
  • LuaTools日志相关内容来喽~帮工程师朋友解决99%的问题
    本文将详细介绍LuaTools日志的相关内容,帮助你解决在使用过程中可能遇到的99%的问题。LuaTools新版下载/使用教程:https://docs.openluat.com/Luatools/一、LuaTools日志分类LuaTools包括4种日志:工具本身的日志、用户日志、底层日志、死机日志。1.工具本身的日志在工具目录/l......
  • jquery表格转excel表格插件
    excel-gen.js是一款jquery表格转excel表格插件。该jquery插件可以在客户端将HTML表格导出为Excel表格,并且下载为一个xlsx类型的Excel文件。在线演示 下载  使用方法excel-gen.js表格转excel表格插件依赖于jszip.js和FileSaver.js插件。<scriptsrc="path/to/jque......