C#使用String.Format以网格格式将数据写入txt
C# Using String.Format to write data to txt in in a grid format
目前我正在尝试使用 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
的用法与我正在寻找的相似。
如果不可能,那也没关系,我只是希望有一个很好的解决方案,只是我没有看到。
也许这样的事情可以实现您的目标?只需添加一个循环来遍历其余属性。在 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 创建数据网格(也许网格不是正确的词,稍后会显示),现在正常情况下会很好,除了其中一个行可能有任意数量的行。
目前代码大致如下:
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
的用法与我正在寻找的相似。
如果不可能,那也没关系,我只是希望有一个很好的解决方案,只是我没有看到。
也许这样的事情可以实现您的目标?只需添加一个循环来遍历其余属性。在 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], "");
}
}