2016-01-28 40 views
0

当我把\吨的console.writelin()这是行不通的/吨,不C#控制台工作

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

塔你好。

+1

你应该看看串填充的,而不是制表 –

+0

它看起来像它的工作,它可能不会做你想要什么,但一个\ t字符是不是“只是做我想要的”-character – harold

+1

它如何工作,但“|合计| |代码|”不等于 “|数量| |每件商品的价格|”之间的空白 –

回答

1

\ t真的在这里工作。但是你期待别的东西。如果你可以提到你期待的是什么样的输出。这很容易帮助。

编辑:下面的代码将创建表的标题,如您所料。调整{}内的第二个数字以适合您的列宽。

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

我需要制作一个表格来显示输出,并且我需要使空间相等 –

3

是的,这是工作。 你可以想象制表符作为列标记。所以,当你把一个\ t你说的控制台:跳转到下一个可用的列标记。在您的标题'产品名称'中已经更新了第一个标签列,所以当控制台进程\ t时,它会跳转到第二列。相反,在数据中,'a'足够小,可以跳到第1列。

这与正确的格式输出:

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

你可以看到它在http://rextester.com/TUVX20333

2

Q

什么是\t做的工作?

一个

它把光标移动到下一列是8

多这究竟是什么在你的例子发生。也许不是你想要的,但肯定是你要求的。 ;)

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'); 
}