sobota 29. listopadu 2008

Operátor formátování - 1. část

Poslední dobou jsem hodně používal operátor -f, nazývaný operátor formátování. Rozhodl jsem se jej tedy zpracovat do série (zatím plánované na čtyři části), ve které bych rád popsal jeho možnosti použití. Abyste nemuseli kód v článku kopírovat ručně, ke každému dílu uveřejním zdroj ve formě souboru TXT použitelného pro skript Start-Demo. První díl můžete stahovat zde.

Operátor slouží k úpravě výstupu např. skriptů. Má dva "parametry" říkající CO chceme formátovat a JAK to chceme formátovat. Pod položkou CO si představte text, číslo, proměnnou nebo třeba metodu .NET Frameworku. Zápis syntaxe je následující:

JAK_FORMATOVAT -f CO_FORMATOVAT

Na levé i pravé straně může být více příkazů, můžete tedy formátovat výstup například pěti proměnných. Nejjednodušší použití jsou například tato:

PS C:\> "{0}" -f "David"
David
PS C:\> "{0} {1}" -f "David", "Martin"
David Martin
PS C:\> "{1} & {0}" -f "David", "Martin"
Martin & David

V prvních dvou příkladech ještě pořádně neformátujeme, ale je vidět použítí. Na levé straně uvádíme ve složených závorkách index textu ze strany pravé. Stejně jako pole se číslování provádí od nuly. Ve druhém řádku tedy vezmeme text "David" (index 0) poté text "Martin" (index 1) a v tomto pořádí je pošleme na standardní výstup. Třetí příklad už mírně výstup mění. Vezme vstupní texty, prohodí jejich pořadí a vloží mezi ně znak &. Uhádnete, co bude výstupem tohoto řádku?

"{4}{4}{1}{5}{0}{3}{0}{5}{2}" -f "e","ka","l","p","po","t"

Práce s indexy je prostě krásná :) Správná odpověď je popokatepetl. Zatím jsme pracovali pouze s pevně danými texty. Mohli jsme samozřejmě postupovat i následujícím způsobem:

PS C:\> $david = "David"
PS C:\> $martin = "Martin"
PS C:\> "{1} & {0}" -f $david, $martin
Martin & David

Kdyby operátor uměl pouze prohazovat indexy, nebyla by práce s ním tak pěkná (resp. byla by pěkná, ale nikdo by ho nepoužíval, protože by byl nadbytečný). Obecná syntaxe levé časti operátoru je trošku více komplikovaná:

{index[,zarovnani][:formatovaciRetezec]}

Prozatím jsme používali pouze index. Ve druhé a třetí části popisu operátoru formátování se podíváme na formatovaciRetezec. V poslední části si ukážeme zarovnani a uděláme zároveň závěrečné shrnutí.

Abyste se těšili na příště, podívejte se na následující příklad. V něm už využíváme formatovaciRetezec a zároveň je vidět, že výstup operátoru formátování můžeme uložit do proměnné pro pozdější použití.

PS C:\> $procesy = Get-Process | Sort-Object CPU -Descending | Select-Object -First 10
PS C:\> foreach ($p in $procesy) {
>> $cpu="{0:###.#}" -f $p.CPU
>> $ws="{0:###.##}" -f ($p.WS/1MB)
>> Write-Host $p.ProcessName `t $cpu `t $ws
>> }
>>
System 241,9 1,23
RSSBandit 156,5 46,15
Rtvscan 93,2 60,21
EZEJMNAP 83,4 3,61
svchost 75,6 26,4
explorer 70,8 25,77
vmware-authd 63,9 4,78
sametime75 54,7 98,18
wmplayer 52 7,19
AcroRd32 46,9 79,31
PS C:\>


Celou druhou část se budeme věnovat formátování datumu a času a budeme si ukazovat jak modifikovat výstup cmdletu Get-Date.

Žádné komentáře: