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 |