c# Как сделать выравнивание текста по ширине?

Программное выравнивание текста по ширине

Небольшая заметка, в которой хочу показать на простом примере, как сделать выравнивание текста по ширине в текстовом файле.

И так предположим, что у нас есть файл, в котором содержится несколько записей.

текстовый файл

Задача: выровнять текст по ширине так, чтобы в файле получилось две колонки.

две колонки

1. Создаём новый проект типа Windows Forms Application.

2. Добавляем на форму кнопку (Button) и OpenFileDialog (ofd).

Windows Forms Application

3. Подписываемся на событие Button.Click, после чего в обработчике данного события добавляем следующий код:

using System.IO; //добавить
private void button1_Click(object sender, EventArgs e)
{
//открываем диалоговое окно выбора файла
if (ofd.ShowDialog() == DialogResult.OK)
{
List<string> list = new List<string>();
//построчно читаем файл
foreach (string str in File.ReadAllLines(ofd.FileName))
{
//отделяем текст от чисел
list.AddRange(str.Split( new char [] {' '}));
}

Вот так выглядит список после разбивки.

метод Split

     //открываем поток на запись в файл
using (StreamWriter sw = new StreamWriter(ofd.FileName))
{
for (int i = 0; i < list.Count; i += 2)
{
//делаем выравнивание
sw.WriteLine(String.Format("{0, -20} {1}", list[i], list[i + 1]));
}
}
MessageBox.Show("Готово!");
}
}

В строке формат вместо чисел 0 и 1 подставляются значения: list[i] и list[i + 1].

Для того чтобы текст выровнялся по ширине, вторым значением (в фигурных скобках) указываем длину столбца, в данном случае &#8212; это число -20. Даже если строка превысит данную длину, то между столбцами всё равно всегда будет создаваться один пробел.

Само же число должно быть отрицательным, чтобы отступ шёл в правую, а не в левую сторону, как например, на картинке ниже.

Выравнивание текста

Пример с тремя колонками:

String.Format("{0,-10} {1,-10} {2}", "BMW", "X5", 2010));

результат

три колонки

Читайте также:

Leave a Reply

Ваш e-mail не будет опубликован. Обязательные поля помечены *

*