Condividi tramite


ConvertFrom-String

Estrae e analizza le proprietà strutturate dal contenuto stringa.

Sintassi

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

Descrizione

Il cmdlet ConvertFrom-String estrae e analizza le proprietà strutturate dal contenuto stringa. Questo cmdlet genera un oggetto analizzando il testo da un flusso di testo tradizionale. Per ogni stringa nella pipeline, il cmdlet divide l'input da un delimitatore o da un'espressione di analisi e quindi assegna i nomi delle proprietà a ognuno degli elementi di divisione risultanti. È possibile specificare questi nomi di proprietà; se non lo si fa, vengono generati automaticamente.

Il set di parametri predefinito del cmdlet, ByDelimiter, divide esattamente sul delimitatore di espressioni regolari. Non esegue l'esecuzione della corrispondenza delle virgolette o del delimitatore mentre il cmdlet Import-Csv esegue.

Il set di parametri alternativi del cmdlet, TemplateParsing, genera elementi dai gruppi acquisiti da un'espressione regolare.

Questo cmdlet supporta due modalità: analisi delimitata di base e analisi generata automaticamente, analisi guidata da esempio.

L'analisi delimitata divide l'input per impostazione predefinita in corrispondenza di spazi vuoti e assegna i nomi delle proprietà ai gruppi risultanti. È possibile personalizzare il delimitatore eseguendo il piping dei risultati ConvertFrom-String in uno dei cmdlet Format-* oppure è possibile usare il parametro Delimiter .

Il cmdlet supporta anche l'analisi generata automaticamente, basata sull'analisi basata su FlashExtract, sul lavoro di ricerca di Microsoft Research.

Esempio

Esempio 1: Generare un oggetto con nomi di proprietà predefiniti

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

P1    P2
--    --
Hello World


PS C:\>

Questo comando genera un oggetto con nomi di proprietà predefiniti, P1 e P2. I risultati sono P1="Hello" e P2="World".

Esempio 1A: ottenere informazioni sull'oggetto generato

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:\>

Il comando genera un oggetto con proprietà P1, P2; entrambe le proprietà sono di tipo 'string', per impostazione predefinita.

Esempio 2: Generare un oggetto con nomi di proprietà predefiniti usando un delimitatore

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

P1 P2
-- --
He o World


PS C:\>

Questo comando genera un oggetto con proprietà P1="He" e P2="o World", specificando l'oggetto 'll' in Hello come delimitatore.

Esempio 3: Generare un oggetto contenente due proprietà denominate

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

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


PS C:\>

Questo comando genera un oggetto contenente due proprietà:

  • FirstWord, con valore "Hello"
  • SecondWord, con valore "World"

Esempio 4: usare un'espressione come valore del parametro TemplateContent, salvare i risultati in una variabile.

$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:\ >

Questo comando usa un'espressione come valore del parametro TemplateContent . L'espressione viene salvata in una variabile per semplicità. Windows PowerShell riconosce ora che la stringa usata nella pipeline per ConvertFrom-String ha tre proprietà:

  • Nome
  • Telefono
  • Età

Ogni riga nell'input viene valutata dalle corrispondenze di esempio; se la riga corrisponde agli esempi indicati nel modello, i valori vengono estratti e passati alla variabile di output definita.

I dati di esempio, $template, offrono due formati di telefono diversi:

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

E due formati di età diversi:

  • 6
  • 12

Ciò implica che i telefoni come (206) 987 4321 non verranno riconosciuti, perché non sono presenti dati di esempio corrispondenti a tale modello (non esiste un trattino tra la sequenza di tre cifre e la sequenza di quattro cifre). Analogamente a 3 o più età, non saranno riconosciute.

Esempio 5: Specifica dei tipi di dati alle proprietà generate

$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:\ >

Questo è lo stesso esempio di No. 4, sopra; le uniche differenze sono nella stringa di modello che include un tipo di dati per ogni proprietà desiderata. Si noti la differenza di allineamento per la colonna di età tra entrambi gli esempi.

Esempio 5A: ottenere informazioni sull'oggetto generato

$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 mostra l'età è di tipo integer.

Parametri

-Delimiter

Specifica un'espressione regolare che identifica il limite tra gli elementi. Gli elementi creati dalla divisione diventano proprietà nell'oggetto risultante. Il delimitatore viene usato in definitiva in una chiamata a System.Text.RegularExpressions.RegularExpression.Split().

Type:String
Aliases:DEL
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-IncludeExtent

Indica che questo cmdlet include una proprietà di testo extent rimossa per impostazione predefinita.

Type:SwitchParameter
Aliases:IE
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-InputObject

Specifica le stringhe ricevute dalla pipeline o una variabile contenente un oggetto stringa.

Type:String
Position:0
Default value:None
Required:True
Accept pipeline input:True
Accept wildcard characters:False

-PropertyNames

Specifica una matrice di nomi di proprietà a cui assegnare valori di divisione nell'oggetto risultante. Ogni riga di testo suddivisa o analizzata genera elementi che rappresentano i valori delle proprietà. Se l'elemento è il risultato di un gruppo di acquisizione e tale gruppo di acquisizione viene denominato (ad esempio, (?<name>) o (?'name') ), il nome del gruppo di acquisizione viene assegnato alla proprietà.

Se si specificano elementi nella matrice PropertyName , tali nomi vengono assegnati alle proprietà che non sono ancora state denominate.

Se si specificano più nomi di proprietà rispetto ai campi, Windows PowerShell ignora i nomi di proprietà aggiuntivi. Se non si specificano nomi di proprietà sufficienti per assegnare nomi a tutti i campi, Windows PowerShell assegna automaticamente nomi di proprietà numerici a qualsiasi proprietà non denominata: P1, P2 e così via.

Type:String[]
Aliases:PN
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-TemplateContent

Specifica un'espressione o un'espressione salvata come variabile, che descrive le proprietà a cui questo cmdlet assegna le stringhe. La sintassi di una specifica di campo modello è la seguente: {[facoltativo-typecast]name(sequence-spec, ad esempio *):example-value}. Un esempio è {PersonInfo*:{Name:Patti Fuller}.

Type:String[]
Aliases:TC
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-TemplateFile

Specifica un file, come matrice, che contiene un modello per l'analisi desiderata della stringa. Nel file modello le proprietà e i relativi valori sono racchiusi tra parentesi quadre, come illustrato nell'esempio seguente. Se una proprietà, ad esempio la proprietà Name e le altre proprietà associate, viene visualizzata più volte, è possibile aggiungere un asterisco (*) per indicare che ciò comporta più record. Ciò consente di evitare di estrarre più proprietà in un singolo record.

{Name*:D avid Chew}

{City:Redmond}, {State:WA}

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

{City:Issaquah}, {State:WA}

Type:String[]
Aliases:TF
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

-UpdateTemplate

Indica che questo cmdlet salva i risultati di un algoritmo di apprendimento in un commento nel file del modello. Ciò rende più veloce il processo di apprendimento degli algoritmi. Per usare questo parametro, è necessario specificare anche un file di modello con il parametro TemplateFile .

Type:SwitchParameter
Aliases:UT
Position:Named
Default value:None
Required:False
Accept pipeline input:False
Accept wildcard characters:False

Input

String