Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 输出日志填充_C#_Text_Padding - Fatal编程技术网

C# 输出日志填充

C# 输出日志填充,c#,text,padding,C#,Text,Padding,我正在编写一个日志解析器,希望将输出数据排序为列,目前使用以下代码: string OEMVersion = string.Format("{0,-20} {1}", "OEM Version", GetXMLData(doc, "OemMarkerVersion")); string OEMID = string.Format("{0,-20} {1}", "OEM ID", GetXMLData(doc, "OemId")); string OEMTableID = string.Forma

我正在编写一个日志解析器,希望将输出数据排序为列,目前使用以下代码:

string OEMVersion = string.Format("{0,-20} {1}", "OEM Version", GetXMLData(doc, "OemMarkerVersion"));
string OEMID = string.Format("{0,-20} {1}", "OEM ID", GetXMLData(doc, "OemId"));
string OEMTableID = string.Format("{0,-20} {1}", "OEM TableID", GetXMLData(doc, "OemTableId"));
string Manufacturer = string.Format("{0,-20} {1}", "Manufacturer", GetXMLData(doc, "Manufacturer"));
string Model = string.Format("{0,-20} {1}", "Model", GetXMLData(doc, "Model"));

对填充进行排序,但输出仅适用于某些字体Consolas、Lucinda Console等。。如何用制表符而不是空格填充列以克服此问题?格式似乎不允许我这样做。谢谢。

只需在格式中添加制表符

string OEMVersion = string.Format("{0,-20}\t{1}", "OEM Version", GetXMLData(doc, "OemMarkerVersion"));
string OEMID = string.Format("{0,-20}\t{1}", "OEM ID", GetXMLData(doc, "OemId"));
string OEMTableID = string.Format("{0,-20}\t{1}", "OEM TableID", GetXMLData(doc, "OemTableId"));
string Manufacturer = string.Format("{0,-20}\t{1}", "Manufacturer", GetXMLData(doc, "Manufacturer"));
string Model = string.Format("{0,-20}\t{1}", "Model", GetXMLData(doc, "Model"));

您可能希望保留空格填充,以减少较短字符串的制表符超过较长字符串的制表符后出现制表符的风险。赢了比例字体不能100%准确,但应该更干净。

如果要在使用可变宽度字体时正确对齐视频输出上的变量,则需要某种表格控件(如ListView或DataGridView)的帮助 我假设是WinForm应用程序,但其他技术的概念是相同的

最好使用控件,因为另一种方法是测量每个字符串的长度(以像素为单位),并将字符串部分定位在精确的像素位置

让我展示一个使用ListView的示例

// Create a new ListView control. (or use the designer)
ListView listView1 = new ListView();
// Position and size of the ListView
listView1.Bounds = new Rectangle(new Point(10,10), new Size(500,200));
// Some display feature....
listView1.View = View.Details;
listView1.FullRowSelect = true;
listView1.GridLines = false;

// Add OEM Version value
ListViewItem item = new ListViewItem("OEM Version");
item.SubItems.Add(GetXMLData(doc, "OemMarkerVersion"));
listView1.Items.Add(item);

// Add OEM ID value
item = new ListViewItem("OEM ID");
item.SubItems.Add( GetXMLData(doc, "OemId"));
listView1.Items.Add(item);

... and so on for the others values and labels ....

// Some header formatting
listView1.Columns.Add("Label", 100, HorizontalAlignment.Left);
listView1.Columns.Add("Data", 400, HorizontalAlignment.Left);

// Put the ListView on video....
yourForm.Controls.Add(listView1);

按比例宽度排列的字体不容易对齐。此外,如果您使用选项卡。即使使用选项卡,根据您的内容,您的输出也可能无法正确对齐。这意味着,如果第二个制造商值比第一个制造商值多4或8个字符,则选项卡将推出第二个制造商值。我想知道对齐的原因。如果这些变量只是简单地写入一个文件,那么就没有必要担心。当前代码将它们完美地对齐,只需使用正确的字体即可。如果这些变量应该在视频上输出,那么我建议使用ListView或DataGridView将数据按列和行对齐,而不用手动对齐。谢谢大家的回复,我想我想要的解决方案根本不存在@Steve,它只是写在一个新的文本文件中,我希望所有字体都有一个漂亮整洁的输出,但从声音上看,它就是做不到的。输出必须是一个文本文件,所以使用控件是不起作用的,它也是一个控制台应用程序-我很抱歉漏掉了这个细节,但谢谢你的代码,这很有趣!谢谢,我会玩一玩,看看结果如何。