Compartilhar via


ConvertFrom-String

Extrai e analisa as propriedades estruturadas do conteúdo da cadeia de caracteres.

Sintaxe

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

Description

O cmdlet ConvertFrom-String extrai e analisa propriedades estruturadas do conteúdo da cadeia de caracteres. Esse cmdlet gera um objeto analisando o texto de um fluxo de texto tradicional. Para cada cadeia de caracteres no pipeline, o cmdlet divide a entrada por um delimitador ou uma expressão de análise e atribui nomes de propriedade a cada um dos elementos de divisão resultantes. Você pode fornecer esses nomes de propriedade; se você não fizer isso, eles serão gerados automaticamente para você.

O conjunto de parâmetros padrão do cmdlet, ByDelimiter, divide exatamente no delimitador de expressão regular. Ele não executa a correspondência de aspas ou o escape do delimitador como o cmdlet Import-Csv faz.

O conjunto de parâmetros alternativo do cmdlet, TemplateParsing, gera elementos dos grupos capturados por uma expressão regular.

Esse cmdlet dá suporte a dois modos: análise delimitada básica e análise controlada por exemplo gerada automaticamente.

A análise delimitada, por padrão, divide a entrada em espaço em branco e atribui nomes de propriedade aos grupos resultantes. Você pode personalizar o delimitador canalizando os resultados do ConvertFrom-String em um dos cmdlets Format-* ou pode usar o parâmetro delimitador de .

O cmdlet também dá suporte à análise controlada por exemplo e gerada automaticamente com base no FlashExtract, trabalho de pesquisa da Microsoft Research.

Exemplos

Exemplo 1: gerar um objeto com nomes de propriedade padrão

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

P1    P2
--    --
Hello World


PS C:\>

Esse comando gera um objeto com nomes de propriedade padrão, P1 e P2. Os resultados são P1="Hello" e P2="World".

Exemplo 1A: Conhecer o objeto gerado

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

O comando gera um objeto com as propriedades P1, P2; ambas as propriedades são do tipo 'string', por padrão.

Exemplo 2: gerar um objeto com nomes de propriedade padrão usando um delimitador

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

P1 P2
-- --
He o World


PS C:\>

Esse comando gera um objeto com as propriedades P1="He" e P2="o World", especificando o 'll' em Hello como delimitador.

Exemplo 3: gerar um objeto que contém duas propriedades nomeadas

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

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


PS C:\>

Esse comando gera um objeto que contém duas propriedades:

  • firstword, com o valor "Olá"
  • secondword, com o valor "World"

Exemplo 4: use uma expressão como o valor do parâmetro TemplateContent, salve os resultados em uma variável.

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

Esse comando usa uma expressão como o valor do parâmetro TemplateContent. A expressão é salva em uma variável para simplificar. O Windows PowerShell entende agora que a cadeia de caracteres usada no pipeline para ConvertFrom-String tem três propriedades:

  • Name
  • telefone
  • idade

Cada linha na entrada é avaliada pelas correspondências de exemplo; se a linha corresponder aos exemplos fornecidos no padrão, os valores serão extraídos e passados para a variável de saída definida.

Os dados de exemplo, $template, fornecem dois formatos de telefone diferentes:

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

E dois formatos de idade diferentes:

  • 6
  • 12

Isso implica que telefones como (206) 987 4321 não serão reconhecidos, pois não há dados de exemplo que correspondam a esse padrão (não há hífen entre a sequência de três dígitos e a sequência de quatro dígitos). Semelhante com 3 ou mais idades de dígito, eles não serão reconhecidos.

Exemplo 5: Especificando tipos de dados para as propriedades geradas

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

Este é o mesmo exemplo que nº 4, acima; as únicas diferenças estão na cadeia de caracteres padrão que inclui um tipo de dados para cada propriedade desejada. Observe a diferença de alinhamento para a coluna de idade entre ambos os exemplos.

Exemplo 5A: Conhecer o objeto gerado

$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 que a idade é do tipo inteiro.

Parâmetros

-Delimiter

Especifica uma expressão regular que identifica o limite entre os elementos. Os elementos criados pela divisão tornam-se propriedades no objeto resultante. O delimitador é usado em uma chamada para System.Text.RegularExpressions.RegularExpression.Split().

Tipo:String
Aliases:DEL
Cargo:Named
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:False
Aceitar caracteres curinga:False

-IncludeExtent

Indica que esse cmdlet inclui uma propriedade de texto de extensão que é removida por padrão.

Tipo:SwitchParameter
Aliases:IE
Cargo:Named
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:False
Aceitar caracteres curinga:False

-InputObject

Especifica cadeias de caracteres recebidas do pipeline ou uma variável que contém um objeto de cadeia de caracteres.

Tipo:String
Cargo:0
Valor padrão:None
Obrigatório:True
Aceitar a entrada de pipeline:True
Aceitar caracteres curinga:False

-PropertyNames

Especifica uma matriz de nomes de propriedade à qual atribuir valores divididos no objeto resultante. Cada linha de texto que você divide ou analisa gera elementos que representam valores de propriedade. Se o elemento for o resultado de um grupo de captura e esse grupo de captura for nomeado (por exemplo, (?<name>) ou (?'name')), o nome desse grupo de captura será atribuído à propriedade.

Se você fornecer elementos na matriz PropertyName, esses nomes serão atribuídos a propriedades que ainda não foram nomeadas.

Se você fornecer mais nomes de propriedades do que campos, o Windows PowerShell ignorará os nomes de propriedades extras. Se você não especificar nomes de propriedade suficientes para nomear todos os campos, o Windows PowerShell atribuirá automaticamente nomes de propriedades numéricas a quaisquer propriedades que não sejam nomeadas: P1, P2, etc.

Tipo:String[]
Aliases:PN
Cargo:Named
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:False
Aceitar caracteres curinga:False

-TemplateContent

Especifica uma expressão ou uma expressão salva como uma variável, que descreve as propriedades às quais esse cmdlet atribui cadeias de caracteres. A sintaxe de uma especificação de campo de modelo é a seguinte: {[optional-typecast]name(sequence-spec, por exemplo *):example-value}. Um exemplo é {PersonInfo*:{Name:Patti Fuller}.

Tipo:String[]
Aliases:TC
Cargo:Named
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:False
Aceitar caracteres curinga:False

-TemplateFile

Especifica um arquivo, como uma matriz, que contém um modelo para a análise desejada da cadeia de caracteres. No arquivo de modelo, as propriedades e seus valores estão entre colchetes, conforme mostrado no exemplo a seguir. Se uma propriedade, como a propriedade Name e suas outras propriedades associadas, for exibida várias vezes, você poderá adicionar um asterisco (*) para indicar que isso resulta em vários registros. Isso evita extrair várias propriedades em um único registro.

{Name*:D avid Chew}

{City:Redmond}, {State:WA}

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

{City:Issaquah}, {State:WA}

Tipo:String[]
Aliases:TF
Cargo:Named
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:False
Aceitar caracteres curinga:False

-UpdateTemplate

Indica que esse cmdlet salva os resultados de um algoritmo de aprendizado em um comentário no arquivo de modelo. Isso torna o processo de aprendizado de algoritmo mais rápido. Para usar esse parâmetro, você também deve especificar um arquivo de modelo com o parâmetro TemplateFile.

Tipo:SwitchParameter
Aliases:UT
Cargo:Named
Valor padrão:None
Obrigatório:False
Aceitar a entrada de pipeline:False
Aceitar caracteres curinga:False

Entradas

String