以与填充类似的样式格式化字符串

时间:2014-07-03 17:37:51

标签: c# wpf string padding string-formatting

在我的程序中,我输出的是一个文本文件。在这个文本文件中,我经常在与我的数据相同的行上发表评论(通常只是一个数值)。有时,当数据变量的长度不同时,它会使得注释不排成一行。出于组织目的,如果我可以格式化字符串以便注释始终在同一列上开始将是有益的。

这是我的问题的一个例子(.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, ' '));

我可以使用哪种方法来确保无论字符串的长度如何,注释始终都在同一列开始?

2 个答案:

答案 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)

请参阅MSDN FORMATING STRING

格式项

格式项具有以下语法:     {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 %

希望这会有所帮助......