Seriál Windows PowerShell – Zpracování textu, vNext (část 52.)

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 https://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: https://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í

- David Moravec, MVP
Mainstream Technologies