/ t无法在C#console

时间:2016-01-28 11:38:07

标签: c# visual-studio console-application

当我把\ t放在console.writelin()它没有工作

 if (reader.HasRows)
        {
            Console.WriteLine("|{0}|\t|{1}|\t|{2}|\t|{3}|\t|{4}|", reader.GetName(0),
                    reader.GetName(1), reader.GetName(2), reader.GetName(3), reader.GetName(4));

            while (reader.Read())
            {

                Console.WriteLine("|{0}|\t|{1}|\t|{2} EGP|\t|{3} EGP|\t|{4}|", reader.GetString(0),
                    reader.GetInt32(1), reader.GetInt32(2), reader.GetInt32(3), reader.GetString(4));
            }
        }

结果是::

    |Product Name|  |Quantity|      |price per item |       |Total| |Code|
|a|     |1|     |0 EGP| |1 EGP| |12|

即使我使用{0,10}{0,-10}也无效

the spacing is not equal and this is not happens when get data from database it happen also if i gust put \t in console.writeline

谢谢。

4 个答案:

答案 0 :(得分:3)

是的,它的工作。 您可以将标签视为列标记。因此,当您放置一个\ t时,您要对控制台说:跳转到下一个可用的列标记。在标题'产品名称'已经撤消了第一个选项卡列,因此当Console进程\ t时,它会跳转到第二列。相反,在数据中,' a'是小的,可以跳到第一列。

这将以正确的格式输出:

    Console.WriteLine(string.Format("|{0,-15}|", "Product Name"));
    Console.WriteLine(string.Format("|{0,-15}|", "a"));

您可以在http://rextester.com/TUVX20333

看到它正常工作

答案 1 :(得分:2)

Q

\t做了什么?

A

它将光标移动到下一列是8的倍数。

这正是您的示例中发生的事情。也许不是你想要的,但绝对是你要求的。 ;)

答案 2 :(得分:1)

\ t真的在这里工作。但是你期待别的东西。如果你能提到你期望的输出类型。这很容易帮助。

编辑:下面的代码会像你预期的那样创建表格的标题。调整{}内的第二个数字以适合您的列宽。

Console.WriteLine(string.Format("|{0,-20}|{1,-20}|{2,-20}|{3,-20}|{4,-20}|", "Product Name", "Quantity", "Price per item", "Total", "Code"));

答案 3 :(得分:0)

权宜之计措施,如果您知道列的长度,则使用string.PadRight。但它很乱:

Console.WriteLine("{0}{1}{2}{3}{4}",
    ("|" + reader.GetString(0) + "|").PadRight(20, ' '),
    ("|" + reader.GetInt32(1) + "|").PadRight(20, ' ')
    ("|" + reader.GetInt32(2) + "EGP|").PadRight(20, ' ')
    ("|" + reader.GetInt32(3) + "EGP|").PadRight(20, ' ')
    ("|" + reader.GetString(4) + "|").PadRight(20, ' '));

尽管将其放入单独的方法中是直截了当的。

如果您真的想使用\t,那么您可以编写一个单独的方法来计算要添加的标签数量。您需要再次知道每个字段的长度:

string ToTabColumn(string text, int length)
{
    int tabSize = 8; // no easy way of getting environment tab length
    int colSize = text.Length + Convert.ToInt32(Math.Ceil((double)(length - text.Length) / tabSize));

    return text.PadRight(colSize, '\t');
}