Compartir a través de


ConvertFrom-String

Extrae y analiza las propiedades estructuradas del contenido de cadena.

Sintaxis

ByDelimiter (valor predeterminado)

ConvertFrom-String
    [-InputObject] <String>
    [-Delimiter <String>]
    [-PropertyNames <String[]>]
    [<CommonParameters>]

TemplateParsing

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

Description

El cmdlet ConvertFrom-String extrae y analiza las propiedades estructuradas del contenido de cadena. Este cmdlet genera un objeto mediante el análisis de texto de una secuencia de texto tradicional. Para cada cadena de la canalización, el cmdlet divide la entrada por un delimitador o una expresión de análisis y, a continuación, asigna nombres de propiedad a cada uno de los elementos divididos resultantes. Puede proporcionar estos nombres de propiedad; si no lo hace, se generan automáticamente.

El conjunto de parámetros predeterminado del cmdlet, ByDelimiter, se divide exactamente en el delimitador de expresiones regulares. No realiza la coincidencia de comillas ni el escape del delimitador como lo hace el cmdlet Import-Csv.

El conjunto de parámetros alternativos del cmdlet, TemplateParsing, genera elementos de los grupos capturados por una expresión regular.

Este cmdlet admite dos modos: el análisis delimitado básico y el análisis basado en ejemplo generado automáticamente.

El análisis delimitado, de forma predeterminada, divide la entrada en espacio en blanco y asigna nombres de propiedad a los grupos resultantes. Puede personalizar el delimitador canalizando el ConvertFrom-String resultados en uno de los cmdlets Format-* o puede usar el parámetro Delimiter .

El cmdlet también admite el análisis basado en ejemplo generado automáticamente en función de la FlashExtract, el trabajo de investigación de Microsoft Research.

Ejemplos

Ejemplo 1: Generación de un objeto con nombres de propiedad predeterminados

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

P1    P2
--    --
Hello World


PS C:\>

Este comando genera un objeto con nombres de propiedad predeterminados, P1 y P2. Los resultados son P1="Hello" y P2="World".

Ejemplo 1A: Obtener información sobre el objeto generado

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

El comando genera un objeto con las propiedades P1, P2; ambas propiedades son de tipo "string", de forma predeterminada.

Ejemplo 2: Generación de un objeto con nombres de propiedad predeterminados mediante un delimitador

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

P1 P2
-- --
He o World


PS C:\>

Este comando genera un objeto con las propiedades P1="He" y P2="o World", especificando "ll" en Hello como delimitador.

Ejemplo 3: Generación de un objeto que contiene dos propiedades con nombre

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

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


PS C:\>

Este comando genera un objeto que contiene dos propiedades:

  • firstWord, con el valor "Hello"
  • secondWord, con el valor "World"

Ejemplo 4: Use una expresión como valor del parámetro TemplateContent y guarde los resultados en una variable.

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

Este comando usa una expresión como valor del parámetro TemplateContent. La expresión se guarda en una variable para simplificar. Windows PowerShell entiende ahora que la cadena que se usa en la canalización para ConvertFrom-String tiene tres propiedades:

  • Nombre
  • de teléfono
  • Edad

Cada línea de la entrada se evalúa mediante las coincidencias de ejemplo; si la línea coincide con los ejemplos especificados en el patrón, los valores se extraen y se pasan a la variable de salida definida.

Los datos de ejemplo, $template, proporcionan dos formatos de teléfono diferentes:

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

Y, dos formatos de edad diferentes:

  • 6
  • 12

Esto implica que no se reconocerán teléfonos como (206) 987 4321, ya que no hay datos de ejemplo que coincidan con ese patrón (no hay ningún guión entre la secuencia de tres dígitos y la secuencia de cuatro dígitos). De forma similar a 3 o más edades de dígitos, no se reconocerán.

Ejemplo 5: Especificar tipos de datos en las propiedades generadas

$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 es el mismo ejemplo que el número 4 anterior; las únicas diferencias están en la cadena de patrón que incluye un tipo de datos para cada propiedad deseada. Observe la diferencia en la alineación de la columna age entre ambos ejemplos.

Ejemplo 5A: Conocer el objeto generado

 $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 muestra que la edad es de tipo entero.

Parámetros

-Delimiter

Especifica una expresión regular que identifica el límite entre los elementos. Los elementos creados por la división se convierten en propiedades en el objeto resultante. El delimitador se usa en última instancia en una llamada a System.Text.RegularExpressions.RegularExpression.Split().

Propiedades de parámetro

Tipo:String
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False
Alias:DEL

Conjuntos de parámetros

ByDelimiter
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-IncludeExtent

Indica que este cmdlet incluye una propiedad de texto de extensión que se quita de forma predeterminada.

Propiedades de parámetro

Tipo:SwitchParameter
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False
Alias:Internet Explorer

Conjuntos de parámetros

TemplateParsing
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-InputObject

Especifica las cadenas recibidas de la canalización o una variable que contiene un objeto de cadena.

Propiedades de parámetro

Tipo:String
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False

Conjuntos de parámetros

(All)
Posición:0
Obligatorio:True
Valor de la canalización:True
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-PropertyNames

Especifica una matriz de nombres de propiedad a los que asignar valores divididos en el objeto resultante. Cada línea de texto que se divide o analiza genera elementos que representan valores de propiedad. Si el elemento es el resultado de un grupo de captura y ese grupo de captura se denomina (por ejemplo, (?<name>) o (?'name') ), el nombre de ese grupo de captura se asigna a la propiedad .

Si proporciona algún elemento de la matriz PropertyName, esos nombres se asignan a las propiedades que aún no se han denominado.

Si proporciona más nombres de propiedad de los que hay campos, Windows PowerShell omite los nombres de propiedad adicionales. Si no especifica suficientes nombres de propiedad para asignar nombres a todos los campos, Windows PowerShell asigna automáticamente nombres de propiedad numéricos a las propiedades que no tienen nombre: P1, P2, etc.

Propiedades de parámetro

Tipo:

String[]

Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False
Alias:PN

Conjuntos de parámetros

ByDelimiter
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-TemplateContent

Especifica una expresión o una expresión guardada como variable, que describe las propiedades a las que este cmdlet asigna cadenas. La sintaxis de una especificación de campo de plantilla es la siguiente: {[optional-typecast]name(sequence-spec, por ejemplo *):example-value}. Un ejemplo es {PersonInfo*:{Name:Patti Fuller}.

Propiedades de parámetro

Tipo:

String[]

Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False
Alias:TC

Conjuntos de parámetros

TemplateParsing
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-TemplateFile

Especifica un archivo, como una matriz, que contiene una plantilla para el análisis deseado de la cadena. En el archivo de plantilla, las propiedades y sus valores se incluyen entre corchetes, como se muestra en el ejemplo siguiente. Si una propiedad, como la propiedad Name y sus otras propiedades asociadas, aparece varias veces, puede agregar un asterisco (*) para indicar que esto da como resultado varios registros. Esto evita la extracción de varias propiedades en un único registro.

{Name*:David Chew}

{City:Redmond}, {State:WA}

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

{City:Issaquah}, {State:WA}

Propiedades de parámetro

Tipo:

String[]

Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False
Alias:TF

Conjuntos de parámetros

TemplateParsing
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

-UpdateTemplate

Indica que este cmdlet guarda los resultados de un algoritmo de aprendizaje en un comentario en el archivo de plantilla. Esto hace que el proceso de aprendizaje del algoritmo sea más rápido. Para usar este parámetro, también debe especificar un archivo de plantilla con el parámetro templateFile .

Propiedades de parámetro

Tipo:SwitchParameter
Valor predeterminado:None
Admite caracteres comodín:False
DontShow:False
Alias:UT

Conjuntos de parámetros

TemplateParsing
Posición:Named
Obligatorio:False
Valor de la canalización:False
Valor de la canalización por nombre de propiedad:False
Valor de los argumentos restantes:False

CommonParameters

Este cmdlet admite los parámetros comunes: -Debug, -ErrorAction, -ErrorVariable, -InformationAction, -InformationVariable, -OutBuffer, -OutVariable, -PipelineVariable, -ProgressAction, -Verbose, -WarningAction y -WarningVariable. Para obtener más información, vea about_CommonParameters.

Entradas

String