如何在C#控制台应用中读取CSV后带表头打印DataTable?
没问题,我来帮你搞定在C#控制台里带表头打印DataTable的需求!下面分两种方案给你实现,一种是美观对齐的版本,另一种是快速简易的版本,你可以根据需求选择:
在C#控制台应用中带表头打印DataTable
方案一:美观对齐版(推荐)
这个版本会自动计算每列的最大宽度,让表头和数据整齐对齐,控制台输出看起来更清爽:
string csv_file_path = @"C:\Users\files\LP.csv"; DataTable csvData = GetDataTabletFromCSVFile(csv_file_path); // 第一步:计算每列的最大宽度(表头名 + 所有行数据的最长值) List<int> columnWidths = new List<int>(); foreach (DataColumn col in csvData.Columns) { // 先取列名的长度作为初始值 int maxWidth = col.ColumnName.Length; // 遍历所有行,找到该列最长的数据长度 foreach (DataRow row in csvData.Rows) { string cellContent = row[col].ToString(); if (cellContent.Length > maxWidth) { maxWidth = cellContent.Length; } } // 加2个字符的边距,避免内容挤在一起 columnWidths.Add(maxWidth + 2); } // 第二步:打印表头 for (int i = 0; i < csvData.Columns.Count; i++) { // 用PadRight填充空格,保证列宽一致 Console.Write(csvData.Columns[i].ColumnName.PadRight(columnWidths[i])); } Console.WriteLine(); // 第三步:打印表头分隔线 foreach (int width in columnWidths) { Console.Write(new string('-', width)); } Console.WriteLine(); // 第四步:打印每一行数据 foreach (DataRow row in csvData.Rows) { for (int i = 0; i < csvData.Columns.Count; i++) { string cellContent = row[i].ToString(); Console.Write(cellContent.PadRight(columnWidths[i])); } Console.WriteLine(); } Console.ReadLine();
代码说明
- 列宽计算:自动适配表头和所有数据的最长长度,避免某列内容太长导致排版混乱
- 对齐处理:用
PadRight()方法统一每个单元格的宽度,输出整齐有序 - 分隔线:用短横线区分表头和数据,结构更清晰
方案二:快速简易版
如果只是临时调试查看数据,不需要特别美观,可以用制表符分隔,实现起来更快:
string csv_file_path = @"C:\Users\files\LP.csv"; DataTable csvData = GetDataTabletFromCSVFile(csv_file_path); // 打印表头 foreach (DataColumn col in csvData.Columns) { Console.Write(col.ColumnName + "\t"); } Console.WriteLine(); // 打印数据行 foreach (DataRow row in csvData.Rows) { foreach (var cellItem in row.ItemArray) { Console.Write(cellItem.ToString() + "\t"); } Console.WriteLine(); } Console.ReadLine();
这个版本用制表符分隔列,虽然对齐效果可能不如第一个方案,但代码更简洁,适合快速验证数据。
内容的提问来源于stack exchange,提问作者user9470599
相关产品推荐
相关产品推荐

