2

コンソールへの出力をフォーマットしようとしていますが、解決策に問題があります。私はC#でそれをやっていますが、Console.Writeを呼び出すたびに、すべてがコンソールの最後に出力され、新しい行が開始されます。だから私がしたいのは、それを4列に調整してから、そこでnewLineを開始することです。

コンソールでの出力の正しい表示方法は次のとおりです。

Sam       John      Bob     Adam

Kelly     Nolan     Carl    Tim

Tom       David

これが私のものですが、間違った方法です:

Sam    John    Bob    Adam  Kelly  Nolan   Carl   Tim

Tom    David

アイデアがあれば提供してください

4

5 に答える 5

3

私があなたの質問を理解した場合。私はコンソールのTxt(ログファイル)でテーブルを印刷するために以下のテクニックを使用しました。

秘訣はString.formatを使用することです

// Example from - http://msdn.microsoft.com/en-us/library/system.string.format.aspx



using System;

public class Example
{
   public static void Main()
   {
      // Create array of 5-tuples with population data for three U.S. cities, 1940-1950.
      Tuple<string, DateTime, int, DateTime, int>[] cities = 
          { Tuple.Create("Los Angeles", new DateTime(1940, 1, 1), 1504277, 
                         new DateTime(1950, 1, 1), 1970358),
            Tuple.Create("New York", new DateTime(1940, 1, 1), 7454995, 
                         new DateTime(1950, 1, 1), 7891957),  
            Tuple.Create("Chicago", new DateTime(1940, 1, 1), 3396808, 
                         new DateTime(1950, 1, 1), 3620962),  
            Tuple.Create("Detroit", new DateTime(1940, 1, 1), 1623452, 
                         new DateTime(1950, 1, 1), 1849568) };

      // Display header 
      string header = String.Format("{0,-12}{1,8}{2,12}{1,8}{2,12}{3,14}\n",
                                    "City", "Year", "Population", "Change (%)");
      Console.WriteLine(header);
      string output;      
      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 %
于 2013-02-21T14:32:37.323 に答える
3

パディングとレイアウトを管理するものを書きます..おそらくこのようなものでしょうか?

class ConsoleColumnFormatter {
    private int _columnWidth = 20;
    private int _numColumns = 4;

    private int _currentColumn = 0;

    public ConsoleColumnFormatter(int numColumns, int columnWidth) {
        _numColumns = numColumns;
        _columnWidth = columnWidth;
    }

    public void Write(string str) {
        Console.Write(str.PadRight(_columnWidth - str.Length, ' '));
        _currentColumn++;

        checkForNewLine();
    }

    private void checkForNewLine() {
        if (_currentColumn >= _numColumns) {
            Console.Write("\n");
            _currentColumn = 0;
        }
    }
}

これ:

ConsoleColumnFormatter formatter = new ConsoleColumnFormatter(4, 20);

for (int i = 1; i <= 10; i++)
    formatter.Write("Column " + i.ToString());

..これを生成します:

Column 1    Column 2    Column 3    Column 4
Column 5    Column 6    Column 7    Column 8
Column 9    Column 10
于 2012-11-08T05:56:46.170 に答える
1

This is how you should write it:

using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  

namespace ConsoleApplication1  
{  
    class Program  
    {  
        static void Main(string[] args)  
        {  
            List<string> names = new List<string>()  {"Sam","John","Bob","Adam","Kelly","Nolan","Carl","Tim","Tom","David"};  

            for (int i = 0; i < names.Count; i++)
            {
                if (i % 4 == 0 && i > 0)
                    Console.WriteLine();

                Console.Write(names[i] + "\t");

            }

            Console.ReadLine();
        }
    }
}

The output would be the same as you wish

enter image description here

于 2012-11-08T06:09:52.093 に答える
0

新しい行を開始するには:

Console.WriteLine();

例えば:

var names = str.Split();
for (int i = 0; i < names.Length; i++)
{
    Console.Write(names[i] + '\t');
    if ((i + 1) % 4 == 0)
        Console.WriteLine();
}
于 2012-11-08T05:50:11.330 に答える
0

コンソールに出力する前に行文字列をフォーマットするために、StringBuilder の AppendLine または Environment.NewLine を利用することもできます。

于 2012-11-08T05:58:40.737 に答える