【问题标题】:C# Using String.Format to write data to txt in in a grid formatC#使用String.Format以网格格式将数据写入txt
【发布时间】:2017-10-04 00:22:06
【问题描述】:

目前我正在尝试使用 String.Format 创建一个数据网格(也许网格不是正确的词,稍后会显示),现在它在正常情况下会很好,除了其中一条线可能有任意行数。

目前的代码大致是这样的:

var TextFormat = "{0,-30} {1,-5} {2,-5} {3,-5} {4,-20}";
Text += String.Format(TextFormat, "Name", "ID", "Rarity", "Attributes", "Tier");
for(int i = 0; i < Items.Count; i++)
{
    var Name = Items[i].Name;
    var ID = Items[i].Id;
    var Rarity = Items[i].Rarity;
    var Attributes = Items[i].Attributes.ToList();
    var Tier = Items[i].Tier;
    Text += String.Format(TextFormat, Name, ID, Rarity, Attributes[0], Tier);
}

基本上Attributes[0] 是硬编码的,只是为了显示目的,以确保格式在间距方面很好,但最终我想让Attributes 打印多行,所以输出会是这样的:

Name      ID     Rarity    Attributes    Tier
Sword     0      Common    Damage +2     0
                           Accuracy +1

Shield    1      Common    Defense +5    0
                           Weight +5

我希望使用String.Format 来简化间距,并且不必在每个空格之间使用统一数量的空格,而且我很难找到与我类似的String.Format 用法我正在寻找。

如果不可能,那也没关系,我只是希望有一个我没有看到的好的解决方案。

【问题讨论】:

  • 对于初学者,您应该使用StringBuilder,但它是可行的。在移动到下一个 Item 之前,您需要一个内部循环来继续为 Attributes 列添加行
  • 那么,您遇到了什么问题?你的行间距不正确吗?你用什么字体来显示(或打印)?
  • 我遇到的问题是,如果我做任何类型的新行,它的格式不正确,它只会跳到下一行并在页面上左对齐。我没有使用任何特殊的字体,只是 .txt 的默认值

标签: c# string.format


【解决方案1】:

也许这样的事情可以实现您的目标?只需添加一个循环来遍历其余属性。从i=1 开始循环将跳过您已经输出的第一个条目。

另外,您应该考虑上面@DiskJunky 添加的StringBuilder 评论。

var TextFormat = "{0,-30} {1,-5} {2,-5} {3,-5} {4,-20}";
Text += String.Format(TextFormat, "Name", "ID", "Rarity", "Attributes", "Tier");
for(int i = 0; i < Items.Count; i++)
{
    var Name = Items[i].Name;
    var ID = Items[i].Id;
    var Rarity = Items[i].Rarity;
    var Attributes = Items[i].Attributes.ToList();
    var Tier = Items[i].Tier;
    Text += String.Format(TextFormat, Name, ID, Rarity, Attributes[0], Tier);
    for(int i=1; i<Attributes.Count; i++){
        Text += String.Format(TextFormat, "", "", "", Attributes[i], "");
    }
}

【讨论】:

  • 我不知道我可以做像String.Format(TextFormat, "", "", "", Attributes[i], ""); 这样的事情,所以这很酷,我会试一试,看看效果如何,谢谢!
  • 这正是我所需要的,我只需要在循环中的TextFormat 前面添加"\n" +。再次感谢!
猜你喜欢
  • 2013-06-22
  • 1970-01-01
  • 1970-01-01
  • 2014-12-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-05
相关资源
最近更新 更多