V minulém díle jsme se podívali na to, jak zpracovávat textové informace pomocí cmdletu Select-String. Jak jste si možná sami vyzkoušeli, jednalo se o metodu funkční, nicméně pro složitější zpracování se může jednat o metodu ne zcela jednoduchou. Vzhledem k tomu, že zpracování textu patří k častým úkolům, objevil se v novém PowerShellu (v5) nový cmdlet, který zpracování textu zjednodušuje. Není potřeba znát regulární výrazy, což je asi největší výhodou.
PowerShell v5 si můžete vyzkoušet i na vašich počítačích. Microsoft uvolňuje zhruba jednou za měsíc novou verzi, poslední je momentálně z listopadu a naleznete ji na http://www.microsoft.com/en-us/download/details.aspx?id=44987
Oním novým cmdletem je ConvertFrom-String. Cmdlet funguje na základě přečtení šablony. Z této šablony poté získá informaci a dodaném textu a tento text pak dokáže zpracovat. Pojďme si ukázat zpracování textu z minulého dílu. První dva záznamy jsou následující:
.NET a jeho vyuziti pri uprave zahradky: Introduction
(AB21) 36 spots of 88 are available for this session.
Thursday, November 6, 09:00 - 10:00, Building/Room: MS Campus/room1
Session Type: Side Session
Speaker(s): Lucian Wischik, Managed Language Team
Hosting Expertise(s): multiple identified
Invited Expertise(s): multiple identified
Invited Interest(s): none identified
Description
Access for corps
(AB13) 111 spots of 144 are available for this session.
Thursday, November 6, 09:00 - 09:30, Building/Room: MS Campus/room2
Session Type: Side Session
Speaker(s): Rob Sinclair
Hosting Expertise(s): none identified
Invited Expertise(s): multiple identified
Invited Interest(s): none identified
Description
Tyto dva záznamy si uložíme do souboru, který nazveme templ.txt. Tuto šablonu si nyní otevřeme např. v notepadu a vložíme do ní značky pro ConvertFrom-String.
{Name*:.NET a jeho vyuziti pri uprave zahradky: Introduction}
{Id:(AB21)} 36 spots of 88 are available for this session.
Thursday, November 6, {Time:09:00 - 10:00}, Building/Room: {Place:MS Campus/room1}
Session Type: Side Session
Speaker(s): Lucian Wischik, Managed Language Team
Hosting Expertise(s): multiple identified
Invited Expertise(s): multiple identified
Invited Interest(s): none identified
Description
{Name*:Access for corps}
{Id:(AB13)} 111 spots of 144 are available for this session.
Thursday, November 6, {Time:09:00 - 09:30}, Building/Room: {Place:MS Campus/room2}
Session Type: Side Session
Speaker(s): Rob Sinclair
Hosting Expertise(s): none identified
Invited Expertise(s): multiple identified
Invited Interest(s): none identified
Description
Pro jednoduchost jsem značky označil tučným písmem. Vzhledem k tomu, že soubor má stejnou strukturu, lze jednoduše najít části, které nás zajímají. Text, který chceme ze zdroje získat, ohraničíme takto: {<Jmeno>:<text>}
Ve složených závorkách nejprve uvedeme jméno, které bude posléze přiřazeno jako vlastnost výslednému objektu a původní text oddělíme dvojtečkou. Hvězdička uvádí, že záznam se vyskytuje v souboru opakovaně a v našem případě znázorňuje začátek každého záznamu. Výsledkem by tedy měl být objekt s vlastnostmi Name, Id, Time, Place.
Nyní si ukážeme, jak funguje ConvertFrom-String.
PS C:\Temp> ConvertFrom-String -TemplateFile .\templ.txt -InputObject (Get-Content .\fri.txt -Raw) | Select Name, Id, Time, Place
Name Id Time Place
---- -- ---- -----
.NET a jeho vyuziti pri up... (AB21) 09:00 - 10:00 MS Campus/room1
Access for corps (AB13) 09:00 - 09:30 MS Campus/room2
SQL Server 2005 – novinky (SD12) 09:00 - 10:30 MS Campus/room3
Access & Excel (CD42) 13:30 - 15:00 MS Campus/room3
Jako šablonu voláme náš připravený soubor a jako procesovaný text je obsah souboru s vlastními daty. Vstupní data by šla do cmdletu poslat i přes rouru.
Výhodou ukázaného přístupu je jednoduchost, s jakou můžete připravit vstupní šablonu bez znalosti regulárních výrazů. A pokud byste si chtěli práci ještě zjednodušit, můžete použít add-in ISESteroids, o kterém jsem již psal, a využít jeho grafického prostředí pro přípravu souboru se šablonou.
Vánoce
A jelikož jsou ty Vánoce, můžete si v PowerShellu zkusit pustit jeden letitý skript: http://ye110wbeard.wordpress.com/2009/12/18/powershell-%E2%80%93-oh-christmas-tree-oh-christmas-tree-%E2%80%93-one-more-change/
No, kdo říká, že v PowerShellu musíte být vždy produktivní