I\'m trying to format some output to the console but having some problems with a solution. I\'m doing it in C# but everything time I call Console.Write it prints the the ent
if i understood your question .I have used below technique for printing out a table in Txt (log file) in console.
The trick is to use the 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 %
I would write something that managed the padding and layout.. perhaps something like this?
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;
}
}
}
This:
ConsoleColumnFormatter formatter = new ConsoleColumnFormatter(4, 20);
for (int i = 1; i <= 10; i++)
formatter.Write("Column " + i.ToString());
..produces, this:
Column 1 Column 2 Column 3 Column 4
Column 5 Column 6 Column 7 Column 8
Column 9 Column 10
You can also utilize StringBuilder's AppendLine or Environment.NewLine - for formatting the rows string before outputting to the Console.
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
To start a new line:
Console.WriteLine();
For example:
var names = str.Split();
for (int i = 0; i < names.Length; i++)
{
Console.Write(names[i] + '\t');
if ((i + 1) % 4 == 0)
Console.WriteLine();
}