Convertir Cadena a Entero – TrucosInformaticos

Powershell

PowerShell pertenece a una clase de lenguaje dinámico, no fuertemente tipado, lo que significa que no es necesario que declare el tipo de datos de las variables. En pocas palabras, PowerShell es lo suficientemente inteligente como para determinar el tipo de datos sobre la marcha.

Nuevamente, no es necesario especificar el tipo de objeto, pero eso no significa que no pueda hacerlo. Algunos escenarios aún pueden tipificar fuertemente el objeto, especialmente cuando se convierte a otro tipo, como nuestro tema en esta publicación.

PowerShell es tan inteligente. ¡Simplemente funciona!

PowerShell puede determinar automáticamente el tipo de variable al realizar varias acciones en una variable, pero esto no siempre funciona bien y correctamente. Hay instancias en las que la propiedad de un objeto puede parecer obvia, como «Tamaño total del artículo» o «UsuariosTotales”, que se espera sean entero valores, solo para descubrir que su tipo de datos es un cadena.

La primera pregunta es, ¿cómo sabe el tipo de datos del objeto? Vamos a averiguar.

Por ejemplo, creemos dos variables de muestra y asignemos el mismo valor.

# Create variables and assign values 
$a = 1
$b = '1'

# Display the variable values
$a
$b

Como puede ver, ambas variables devuelven el valor exacto de 1. Si es así, podemos usar estos valores en una operación matemática. Veamos sumando estos dos valores.

$a + $b

¡Funcionó!

cadena powershell a int

No hay error. Se realizó una suma en los dos valores y devolvió el resultado correcto. ¿Eso significa que estos dos valores son del mismo tipo de datos? La respuesta es no, y así es como puedes averiguarlo.

$a.GetType() 
$b.GetType()

Como puede ver, PowerShell asignó automáticamente $a como un Int32 (entero de 32 bits) y $b como un Cadena. Entonces, son diferentes, después de todo.

convertir cadena a int powershell

Esta demostración es solo un ejemplo de cuán inteligente es PowerShell al manejar objetos y tipos de datos. Puede evaluar expresiones y tomar decisiones sobre cómo manejarlas. En este caso, PowerShell entiende que desea agregar 1 y ‘1’ juntos.

pero solo porque PowerShell podría no significa debería confiar en esta determinación automática de tipos y expresiones. Significativamente, al crear secuencias de comandos y trabajar en múltiples tipos de datos, le beneficiaría convertir los valores en los tipos previstos para evitar dolores de cabeza en la depuración.

Pista. Otros tipos de datos populares en PowerShell:

  • [string]

  • [char] — código de carácter ASCII

  • [bool] – «Verdadero o falso»;

  • [int] — número de 32 bits;

  • [long] — número de 64 bits;

  • [decimal] — un número de coma flotante de 128 bits y ad al final;

  • [double] — número de punto flotante de 8 bits;

  • [single] — número de punto flotante de 32 bits;

  • [DateTime] — Fecha y hora de almacenamiento del tipo de datos Powershell;

  • [array] — Matriz de PowerShell;

  • [hashtable] – tabla de picadillo;

  • [pscustomonject] — una matriz de claves de tipo y valores.

¿Cómo convertir cadenas a enteros en PowerShell?

Si intenta asignar explícitamente un valor de cadena a una variable numérica o intenta realizar otra operación numérica, obtendrá un error:

[int]$number="Ten"

MetadataError: no se puede convertir el valor «Diez» para escribir «System.Int32». Error: «La cadena de entrada ‘Diez’ no tenía el formato correcto».

powershell convertir a int

Hay varias formas de convertir la cadena en un número entero, dando el mismo resultado.

Digamos que tiene una variable que contiene una cadena (tipo Sistema.Cadena):

$stringN = "777" 
$stringN.GetType().FullName

La captura de pantalla a continuación confirma que «777» no es un número sino una palabra.

powershell convertir cadena a int64

Puede convertir la cadena en un número entero utilizando estas técnicas.

  • Escriba fuertemente la variable:
    [int]$stringN 

    ([int]$stringN).GetType().FullName

    tinte powershell

  • Utilizando el [int]::Analizar gramaticalmente() método:
    [int]::Parse($stringN) 

    ([int]::Parse($stringN)).GetType().FullName

    cadena powershell a int64

  • Utilizando el -as [datatype] declaración:
    $stringN -as [int] 

    ($stringN -as [int]).GetType().FullName

    powershell a int

  • llamando al Cadena.ToInt32() método:
    $stringN.ToInt32($null) 

    ($stringN.ToInt32($null)).GetType().FullName

    cadena powershell a entero

  • Utilizando el [convert]::ToInt32() método:
    [convert]::ToInt32($stringN) 

    ([convert]::ToInt32($stringN)).GetType().FullName

    PowerShell toint32
    Nota. Aprenda a usar la directiva de grupo para administrar, agregar, modificar, importar y eliminar claves de registro.

  • Consejo: El [convert] class le permite convertir un valor no solo a Int32, sino también a otros tipos de datos enteros:
    • [convert]::ToInt16 — Entero de 16 bits con signo (corto)
    • [convert]::Int64 — Entero de 64 bits con signo (largo)
    • [convert]::UInt32 — Entero de 32 bits sin signo (uint)
    • [convert]::UInt64 — Entero de 64 bits sin signo (ulong)

Comprobar la entrada de enteros en los scripts de PowerShell

En algunos casos, cuando obtiene el valor de una variable del usuario o de cualquier otra fuente, debe verificar si la entrada es un valor entero. Puede usar la siguiente función de PowerShell para validar la entrada de números enteros en los scripts de PowerShell. Esta función toma un valor como entrada y verifica si corresponde al tipo de datos Integer32 (después de la conversión)

Artículo relacionado. ¿Cómo crear funciones avanzadas con PowerShell CmdletBinding?

Function IsInteger { 
param(
[string]$vInteger
)
Try {
$null = [convert]::ToInt32($vInteger)
return $True
}
Catch {
return $False
}
}

Puede verificar la corrección de la función en los datos de prueba:

IsInteger "five" 
IsInteger "70.1"
IsInteger "100"
IsInteger 100

powershell convertir cadena a entero

Conversión de cadena formateada a entero

A veces, el supuesto valor numérico se muestra como una cadena formateada, como las que tienen «,» para la notación de miles.

$value1 = "120,830,200" 
$value2 = "120,830,200 (bytes)"

Comprende estos valores, pero ninguno de los métodos de conversión de cadena a entero que aprendimos funcionará porque no son puramente números.

PowerShell analizar int

En este caso, debe emplear la manipulación de cadenas para limpiar los valores y conservar solo los números.

Específicamente a los ejemplos anteriores, una forma es usar el Cadena.Reemplazar() método.

$value1.Replace(',',$null) 
$value2.Replace(',',$null).Replace(' (bytes)',$null)

convertir cadena a número powershell

Dado que los valores se han limpiado, ahora puede convertirlos en números enteros utilizando cualquiera de los métodos que discutimos.

[int]($value1.Replace(',',$null)) 
$value2.Replace(',',$null).Replace(' (bytes)',$null) -as [int]

PowerShell toint16

Conclusión

En conclusión, la naturaleza dinámica y adaptable de PowerShell lo convierte en una herramienta poderosa para manejar varios tipos de datos y operaciones. Si bien PowerShell a menudo puede determinar el tipo de datos y realizar operaciones sin problemas, es esencial estar al tanto de posibles discrepancias de tipos que pueden generar resultados inesperados.

La capacidad de asignar automáticamente tipos de datos, como se demuestra en el ejemplo de agregar un número entero y una cadena, muestra el manejo inteligente de expresiones de PowerShell.

Sin embargo, esta automatización no niega la importancia de comprender y manejar explícitamente los tipos de datos, especialmente cuando se trabaja con diversos conjuntos de datos o en escenarios de secuencias de comandos. La conversión explícita de valores a sus tipos previstos, como exploramos en esta publicación, ayuda a evitar posibles desafíos de depuración.

Exploramos varios métodos al convertir cadenas en números enteros, y cada uno proporcionó resultados similares. Estos métodos incluyen tipeo fuerte, usando métodos estáticos como [int]::Analizar gramaticalmente()empleando el -como [int] declaración, y utilizando métodos de la [convert] clase. También discutimos la importancia de verificar y validar entradas de números enteros al interactuar con usuarios o fuentes de datos externas.

4/5 - (113 votos)

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *