2016-01-28 38 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'); 
}