Use string.Format and the composite formatting precision feature allows you to prepare your text in columns with the exact number of characters for each column
string[,] P = new string[2, 3] {
{ "John", "Smith", "17" },
{ "James", "Sawyer", "31" }
};
using (StreamWriter s_w = new StreamWriter(target))
{
string row = string.Format("{0,-30}{1,-30}{2,10}", "Firstname", "Lastname", "Age");
s_w.WriteLine(row);
for (int i = 0; i < 2; i++)
{
row = string.Format("{0,-30}{1,-30}{2,10}", P[i,0], P[i,1], P[i,2]);
s_w.WriteLine(row);
}
}
this will align your data in three columns, the first is 30 characters wide and the text is aligned on the left, the same for the second column, while the third column is 10 characters wide and the data (age) is aligned on the right.
Of course to see an exact alignment of your column you need to look at your data using a fixed width font (Courier or Lucida Console for example) otherwise you will see disaligned columns, but this is due to the fact that in a variable width font the letter W
needs more pixels in the horizontal than the letter i