Заметки о Windows и других программных продуктах Microsoft...

Форматирование вывода с помощью оператора -f

Форматирование вывода с помощью оператора -f

Обычно для форматирования вывода в PowerShell используются командлеты типа Format-* (Format-Table, Format-List и т.п.). Однако сегодня речь пойдет не о них, а о ″маленьком но гордом″ операторе форматирования -f.

Оператор -f реализован с помощью .Net метода format объекта string. Синтаксис у него простой, хотя и несколько необычный: слева от оператора, в кавычках, указывается строка с индексами объектов, справа — сами объекты, разделенные запятой. Индексы размещаются в фигурных скобках, счет идет с нуля.

С помощью индексов определяется порядок вывода объектов, например так получим все объекты в прямом порядке:

″{0} {1} {2}″ -f ″раз″,″два″,″три″

а так в обратном:

″{2} {1} {0}″ -f ″раз″,″два″,″три″

оператор -f

 

Примечание. Если вы предпочитаете стиль .Net, то предыдущий пример можно записать так:

[string]::Format(″{0} {1} {2}″,′раз′,′два′,′три′)

.Net

 

Выводимая строка может включать в себя произвольный текст. Это позволяет форматировать текстовый вывод, вставляя в него нужные объекты. Например:

″My name {1}, {0} {1}.″ -f ″James″,″Bond″

пример использования

 

Для каждого объекта можно задать позицию, вместе с индексом через запятую указав требуемое смещение. Для примера немного сдвинем вправо третий объект:

″{0} {1} {2,10}″ -f ″раз″,″два″,″три″

смещение

 

Это свойство оператора -f можно использовать при форматировании больших объемов данных. Для примера возьмем список процессов, отсортируем их по нагрузке и выведем первые десять:

$proc = Get-Process | sort cpu -Descending | select -First 10
foreach ($p in $proc) {″{0} {1}″ -f $p.processname, $p.cpu}

Как видите, вывод получается не очень информативным. Попробуем его облагородить, добавив смещение:

foreach ($p in $proc) {″{0,-10} {1,10}″ -f $p.processname, $p.cpu}

Так гораздо лучше. Кстати, смещение может быть как положительным, так и отрицательным.

форматирование со смещением

 

Еще оператор -f позволяет выводить объекты в различных форматах. Формат задаётся специальным определителем (спецификатором) формата, указанным через двоеточие. Поддерживаемых форматов множество, давайте рассмотрим некоторые, наиболее популярные из них.

Спецификатор C (currency) возвращает объект в текущей валюте, например:

″{0:C}″ -f 100

формат currency

 

Спецификатор N (number) означает стандартный числовой формат. Например:

″{0:N}″ -f 100

По умолчанию значение указывается с точностью до двух знаков после запятой. Это можно изменить, указав для спецификатора требуемое количество знаков после запятой. Например так выведем только целую часть числа:

″{0:N0}″ -f 100

а так увеличим точность до четырех знаков после запятой:

″{0:N4}″ -f 100

Кстати таким нехитрым способом можно производить округление чисел:

″{0:N1}″ -f 99.886

числовой формат

 

Спецификатор D (decimal) означает десятичный формат числа, а X (hexadecimal) — шестнадцатеричный. С их помощью можно переводить числа из десятичной системы в шестнадцатеричную:

″{0:X}″ -f 10

и обратно:

″{0:D}″ -f 0xA

десятичного в шеснадцатеричный формат

 

Спецификатор E (exponential) называют научным. Если вы работаете с очень большими числами, то он вам может пригодиться. Например 1000000 (миллион) в экспоненциальном формате можно представить как 1 * 106 :

″{0:E}″ -f 1000000

экпоненциальный формат

 

С помощью спецификатора P (percent) можно представлять числа в виде процентов. Например так:

″{0:P}″ -f 0.7

или так:

″{0:P}″ -f (7/8)

При необходимости можно округлить проценты:

″{0:P0}″ -f (1/3)

или наоборот, задать нужную точность:

″{0:P4}″ -f (1/3)

Оператор -f умеет оперировать различными величинами. Для примера узнаем, сколько процентов составляет 100МБ от 1ГБ:

″{0:P}″ -f (1ooMB/1GB)

проценты

 

Еще оператор -f умеет работать с временем и датой. Например так выведем текущий день месяца:

″{0:dd}″ -f (Get-Date)

месяц:

″{0:MMMM}″ -f (Get-Date)

год:

″{0:уууу}″ -f (Get-Date)

и точное время:

″{0:T}″ -f (Get-Date)

При желании все это можно объединить, например так:

″{0:dd} {0:MMMM} {0:yyyy} {0:T}″ -f (Get-Date)

формат время дата

 

Но это еще не все.

Кроме стандартных спецификаторов есть еще кастомные, которые позволяют более гибко форматировать данные. Так с помощью спецификатора # (Digit placeholder) можно добавить в число разделители. К примеру, у нас есть набор цифр, который надо привести к виду телефонного номера. Сделать это можно вот такой командой:

″{0:###-##-##}″ -f 1234567

разделители

 

Спецификатор 0 (Zero placeholder) позволяет указывать формат числа. Например нам требуется получить четырезначное число:

″{0:0000}″ -f 123

два знака после запятой:

″{0:0.00}″ -f 123

оба эти требования вместе:

″{0:0000.00}″ -f 123

Этот способ можно использовать для округления дробей:

″{0:0.0}″ -f .123

использование 0 для форматирования

 

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

″{0:0,0}″ -f 1234567890
″{0:0,0,}″ -f 1234567890
″{0:0,0,,}″ -f 1234567890

использование запятой для форматирования

 

И еще два интересных спецификатора. Знак процента % (Percentage placeholder) приводит к умножению исходного числа на 100 перед форматированием:

″{0:0.0%}″ -f 0.123

А знак промилле ‰ (Per mille placeholder) приводит к умножению исходного числа на 1000:

″{0:0.0‰}″ -f 0.123

Примечание. Для ввода символа промилле в Windows надо при включенном NumLock нажать клавишу Alt и удерживая ее набрать на цифровой клавиатуре 0137.

знаки процета и промилле

 

На этом пожалуй и остановимся. Полный список поддерживаемых форматов можно найти здесь.

 
 
Комментарии

Пока нет комментариев.