Сервісний центр VPSGroup ремонт комп'ютерної техніки, заправка картриджів, ремонт оргтехніки, Київ, Виставковий центр, Васильківська, 55

Форматування виведення за допомогою оператора -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.



На цьому мабуть і зупинимося.Повний список підтримуваних форматів можна знайти тут.

.