在我的程序中,我输出的是一个文本文件。在这个文本文件中,我经常在与我的数据相同的行上发表评论(通常只是一个数值)。有时,当数据变量的长度不同时,它会使得注释不排成一行。出于组织目的,如果我可以格式化字符串以便注释始终在同一列上开始将是有益的。
这是我的问题的一个例子(.txt文件输出):
//Because of the extra number in the second value, the comments don't line up
5 ; First Data Value
12 ; Second Data Value
现在我正在使用填充(并且它可以工作),但我不喜欢我必须计算所有字符串值的长度来计算填充它的程度。我不能使用string.Length因为我输出的数据是这样的:
StreamWriter.WriteLine(dataVal1 + "; First Data Value".PadLeft(29, ' '));
StreamWriter.WriteLine(dataVal2 + "; Second Data Value".PadLeft(30, ' '));
我可以使用哪种方法来确保无论字符串的长度如何,注释始终都在同一列开始?
答案 0 :(得分:3)
为什么不在第一个字段上指定右边距,而是始终保持一致:
file.WriteLine(String.Format("{0,-30}; {1}", dataVal1, "First Data Value"));
file.WriteLine(String.Format("{0,-30}; {1}", dataVal2, "Second Data Value"));
答案 1 :(得分:1)
格式项
格式项具有以下语法: {index [,alignment] [:formatString]}
<强>对齐强>
可选。一个有符号整数,表示插入参数的字段的总长度,以及它是右对齐(正整数)还是左对齐(负整数)。如果省略对齐,则相应参数的字符串表示形式将插入到没有前导或尾随空格的字段中。
示例:
foreach (var city in cities) {
output = String.Format("{0,-12}{1,8:yyyy}{2,12:N0}{3,8:yyyy}{4,12:N0}{5,14:P1}",
city.Item1, city.Item2, city.Item3, city.Item4, city.Item5,
(city.Item5 - city.Item3)/ (double)city.Item3);
Console.WriteLine(output);}
输出:
// The example displays the following output:
// City Year Population Year Population Change (%)
//
// Los Angeles 1940 1,504,277 1950 1,970,358 31.0 %
// New York 1940 7,454,995 1950 7,891,957 5.9 %
// Chicago 1940 3,396,808 1950 3,620,962 6.6 %
// Detroit 1940 1,623,452 1950 1,849,568 13.9 %
希望这会有所帮助......