Sdílet prostřednictvím


ConvertFrom-String

Extrahuje a analyzuje strukturované vlastnosti z obsahu řetězce.

Syntaxe

ConvertFrom-String
                [-Delimiter <String>]
                [-PropertyNames <String[]>]
                [-InputObject] <String>
                [<CommonParameters>]
ConvertFrom-String
                [-TemplateFile <String[]>]
                [-TemplateContent <String[]>]
                [-IncludeExtent]
                [-UpdateTemplate]
                [-InputObject] <String>
                [<CommonParameters>]

Description

Rutina ConvertFrom-String extrahuje a parsuje strukturované vlastnosti z obsahu řetězce. Tato rutina vygeneruje objekt parsováním textu z tradičního textového streamu. Pro každý řetězec v kanálu rutina rozdělí vstup oddělovačem nebo parsovacím výrazem a potom přiřadí názvy vlastností každému výslednému rozděleném elementu. Tyto názvy vlastností můžete zadat; pokud ne, automaticky se vygenerují za vás.

Výchozí sada parametrů rutiny, ByDelimiter, rozdělí přesně na oddělovač regulárních výrazů. Neprovádí porovnávání uvozovek ani eskadér oddělovač, protože Import-Csv rutina.

Alternativní sada parametrů rutiny TemplateParsinggeneruje prvky ze skupin zachycených regulárním výrazem.

Tato rutina podporuje dva režimy: základní parsování s oddělovači a automaticky generované, například řízené analýzy.

Parsování s oddělovači ve výchozím nastavení rozdělí vstup na prázdné místo a přiřadí názvy vlastností výsledným skupinám. Oddělovač můžete přizpůsobit propojením ConvertFrom-String výsledků do jedné z rutin Format-* nebo můžete použít oddělovač parametru.

Tato rutina také podporuje automaticky generované ukázkové analýzy založené na FlashExtract, výzkumné práci společnosti Microsoft Research.

Příklady

Příklad 1: Vygenerování objektu s výchozími názvy vlastností

PS C:\> "Hello World" | ConvertFrom-String

P1    P2
--    --
Hello World


PS C:\>

Tento příkaz vygeneruje objekt s výchozími názvy vlastností, P1 a P2. Výsledky jsou P1="Hello" a P2="World".

Příklad 1A: Seznámení s vygenerovaným objektem

PS C:\> "Hello World" | ConvertFrom-String | Get-Member


   TypeName: System.Management.Automation.PSCustomObject

Name        MemberType   Definition
----        ----------   ----------
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()
GetType     Method       type GetType()
ToString    Method       string ToString()
P1          NoteProperty string P1=Hello
P2          NoteProperty string P2=World


PS C:\>

Příkaz vygeneruje jeden objekt s vlastnostmi P1, P2; obě vlastnosti mají ve výchozím nastavení typ string.

Příklad 2: Vygenerování objektu s výchozími názvy vlastností pomocí oddělovače

PS C:\> "Hello World" | ConvertFrom-String -Delimiter "ll"

P1 P2
-- --
He o World


PS C:\>

Tento příkaz vygeneruje objekt s vlastnostmi P1="He" a P2="o World" zadáním "ll" v hello jako oddělovače.

Příklad 3: Vygenerování objektu, který obsahuje dvě pojmenované vlastnosti

PS C:\> "Hello World" | ConvertFrom-String -PropertyNames FirstWord, SecondWord

FirstWord SecondWord
--------- ----------
Hello     World


PS C:\>

Tento příkaz vygeneruje objekt, který obsahuje dvě vlastnosti:

  • FirstWord s hodnotou "Hello"
  • secondword, s hodnotou "World"

Příklad 4: Jako hodnotu parametru TemplateContent použijte výraz, uložte výsledky do proměnné.

$template = @'
{Name*:Phoebe Cat}, {phone:425-123-6789}, {age:6}
{Name*:Lucky Shot}, {phone:(206) 987-4321}, {age:12}
'@

$testText = @'
Phoebe Cat, 425-123-6789, 6
Lucky Shot, (206) 987-4321, 12
Elephant Wise, 425-888-7766, 87
Wild Shrimp, (111)  222-3333, 1
'@

$testText  |
    ConvertFrom-String -TemplateContent $template -OutVariable PersonalData |
    Out-Null

Write-output ("Pet items found: " + ($PersonalData.Count))
$PersonalData


Pet items found: 4

Name          phone           age
----          -----           ---
Phoebe Cat    425-123-6789    6
Lucky Shot    (206) 987-4321  12
Elephant Wise 425-888-7766    87
Wild Shrimp   (111)  222-3333 1

C:\ >

Tento příkaz používá výraz jako hodnotu parametru TemplateContent. Výraz je uložen v proměnné pro jednoduchost. Windows PowerShell teď chápe, že řetězec použitý v kanálu pro ConvertFrom-String má tři vlastnosti:

  • názvu
  • telefonní
  • věku

Každý řádek ve vstupu se vyhodnocuje podle shody vzorku; pokud řádek odpovídá příkladům zadaným v modelu, hodnoty se extrahují a předají do definované výstupní proměnné.

Ukázková data, $template, poskytují dva různé formáty telefonu:

  • 425-123-6789
  • (206) 987-4321

A dva různé formáty věku:

  • 6
  • 12

To znamená, že telefony jako (206) 987 4321 nebudou rozpoznány, protože neexistují žádná ukázková data, která odpovídají tomuto vzoru (mezi třícifernou sekvencí a čtyřmístnou sekvencí neexistuje žádná spojovník). Podobně jako u 3 nebo více číslic věku se nerozpozná.

Příklad 5: Určení datových typů do vygenerovaných vlastností

$template = @'
{[string]Name*:Phoebe Cat}, {[string]phone:425-123-6789}, {[int]age:6}
{[string]Name*:Lucky Shot}, {[string]phone:(206) 987-4321}, {[int]age:12}
'@

$testText = @'
Phoebe Cat, 425-123-6789, 6
Lucky Shot, (206) 987-4321, 12
Elephant Wise, 425-888-7766, 87
Wild Shrimp, (111)  222-3333, 1
'@

$testText  |
    ConvertFrom-String -TemplateContent $template -OutVariable PersonalData | Out-Null

Write-output ("Pet items found: " + ($PersonalData.Count))
$PersonalData


Pet items found: 4

Name          phone           age
----          -----           ---
Phoebe Cat    425-123-6789      6
Lucky Shot    (206) 987-4321   12
Elephant Wise 425-888-7766     87
Wild Shrimp   (111)  222-3333   1



C:\ >

Toto je stejný příklad jako číslo 4 výše; jedinými rozdíly jsou ve vzorovém řetězci, který obsahuje datový typ pro každou požadovanou vlastnost. Všimněte si rozdílu v zarovnání sloupce stáří mezi oběma příklady.

Příklad 5A: Seznámení s vygenerovaným objektem

$template = @'
 {[string]Name*:Phoebe Cat}, {[string]phone:425-123-6789}, {[int]age:6}
 {[string]Name*:Lucky Shot}, {[string]phone:(206) 987-4321}, {[int]age:12}
 '@

 $testText = @'
 Phoebe Cat, 425-123-6789, 6
 Lucky Shot, (206) 987-4321, 12
 Elephant Wise, 425-888-7766, 87
 Wild Shrimp, (111)  222-3333, 1
 '@

 $testText  |
     ConvertFrom-String -TemplateContent $template -OutVariable PersonalData |
     Out-Null

 $PersonalData | Get-Member



   TypeName: System.Management.Automation.PSCustomObject

Name        MemberType   Definition
----        ----------   ----------
Equals      Method       bool Equals(System.Object obj)
GetHashCode Method       int GetHashCode()
GetType     Method       type GetType()
ToString    Method       string ToString()
age         NoteProperty int age=6
Name        NoteProperty string Name=Phoebe Cat
phone       NoteProperty string phone=425-123-6789

C:\ >

Get-Member zobrazuje věk celočíselného typu.

Parametry

-Delimiter

Určuje regulární výraz, který identifikuje hranici mezi prvky. Prvky vytvořené rozdělením se stanou vlastnostmi ve výsledném objektu. Oddělovač se nakonec používá ve volání System.Text.RegularExpressions.RegularExpression.Split().

Typ:String
Aliasy:DEL
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-IncludeExtent

Označuje, že tato rutina obsahuje vlastnost rozsahu textu, která je ve výchozím nastavení odebrána.

Typ:SwitchParameter
Aliasy:IE
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-InputObject

Určuje řetězce přijaté z kanálu nebo proměnnou, která obsahuje objekt řetězce.

Typ:String
Position:0
Default value:None
Vyžadováno:True
Přijmout vstup kanálu:True
Přijmout zástupné znaky:False

-PropertyNames

Určuje pole názvů vlastností, kterým se mají přiřadit rozdělené hodnoty ve výsledném objektu. Každý řádek textu, který rozdělíte nebo parsujete, generuje prvky, které představují hodnoty vlastností. Pokud je prvek výsledkem skupiny zachycení a tato skupina zachycení je pojmenovaná (například (?<name>) nebo (?'name')), pak je název této skupiny zachycení přiřazen k vlastnosti.

Pokud do pole Property Name zadáte nějaké prvky, přiřadí se tyto názvy vlastnostem, které ještě nebyly pojmenovány.

Pokud zadáte více názvů vlastností, než jsou pole, Windows PowerShell ignoruje názvy dalších vlastností. Pokud nezadáte dostatek názvů vlastností pro pojmenování všech polí, Windows PowerShell automaticky přiřadí číselné názvy vlastností všem vlastnostem, které nemají název: P1, P2 atd.

Typ:String[]
Aliasy:PN
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-TemplateContent

Určuje výraz nebo výraz uložený jako proměnnou, který popisuje vlastnosti, kterým tato rutina přiřazuje řetězce. Syntaxe specifikace pole šablony je následující: {[optional-typecast]name(sequence-spec, například *):example-value}. Příkladem je {PersonInfo*:{Name:Patti Fuller}.

Typ:String[]
Aliasy:TC
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-TemplateFile

Určuje soubor jako pole, který obsahuje šablonu pro požadovanou analýzu řetězce. V souboru šablony jsou vlastnosti a jejich hodnoty uzavřeny v hranatých závorkách, jak je znázorněno v následujícím příkladu. Pokud se vlastnost, jako je například vlastnost Název a její přidružené další vlastnosti, zobrazí několikrát, můžete přidat hvězdičku (*), která označuje, že výsledkem je více záznamů. Tím se zabrání extrahování více vlastností do jednoho záznamu.

{Name*:D avid Chew}

{City:Redmond}, {State:WA}

{Name*:Evan Narvaez} {Name*:Antonio Moreno}

{City:Issaquah}, {State:WA}

Typ:String[]
Aliasy:TF
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

-UpdateTemplate

Označuje, že tato rutina ukládá výsledky algoritmu učení do komentáře v souboru šablony. Díky tomu je proces učení algoritmu rychlejší. Chcete-li použít tento parametr, musíte také zadat soubor šablony s parametrem TemplateFile.

Typ:SwitchParameter
Aliasy:UT
Position:Named
Default value:None
Vyžadováno:False
Přijmout vstup kanálu:False
Přijmout zástupné znaky:False

Vstupy

String