Форматування виведення за допомогою оператора -f.
Зазвичай для форматування виводу в PowerShell використовуються командлети типу Format- * (Format-Table, Format-List і т.п.). Однак сьогодні мова піде не про них, а про "маленького але гордій" операторі форматування -f.
Оператор -f реалізований за допомогою .Net методу format об'єкта string. Синтаксис у нього простий, хоча і дещо незвичний: зліва від оператора, в лапках, вказується рядок з індексами об'єктів, праворуч - самі об'єкти, розділені комою.Індекси розміщуються в фігурних дужках, рахунок йде з нуля.
За допомогою індексів визначається порядок виведення об'єктів, наприклад так отримаємо всі об'єкти в прямому порядку:
"{0} {1} { 2} "-f" раз "," два "," три "
а так в зворотному:
" {2} {1} {0} "-f" раз "," два "," три "
Примітка.Якщо ви віддаєте перевагу стиль .Net, то попередній приклад можна записати так:
[string] :: Format ( "{0} {1} {2}", 'раз', 'два', 'три ')
Що виводиться рядок може включати в себе довільний текст. Це дозволяє форматувати текстовий висновок, вставляючи в нього потрібні об'єкти.Наприклад:
"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
Специфікатор 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
Окремо варто згадати про кому, яка може служити не тільки роздільником, але і специфікатором масштабування чисел.Так якщо одна або кілька ком вказані зліва від явної або неявної коми, то форматується число ділиться на 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.
На цьому мабуть і зупинимося.Повний список підтримуваних форматів можна знайти тут.
.