es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Velocidad añadiendo valores dentro de una declaración de concatenación

Disculpas si esto ha sido preguntado antes, pero no pude encontrar una respuesta directa.

Tengo el siguiente código, la aplicación es de terceros, por lo que el $supernet entrante se proporciona como una cadena. Entonces lo que quiero hacer es tomar una dirección IP y luego manipularla para crear una lista de subredes basadas en una plantilla.

#set ($Supernet = "10.10.10.10") 
#set ($octs = $Supernet.split("\."))

#set ($netmgmt[2] = "$octs[0].$octs[1].$octs[2].$octs[2]+1")

$netmgmt

Pero esto, como esperaba, da el resultado “10.10.10.10+1”.

Descubrí que puedo hacer esto de una manera más detallada:

  1. Convertir $oct[2] a un número entero y almacenarlo en una variable.
  2. Crear una variable temporal y almacenar el resultado de la suma de $oct[2] convertido.
  3. Luego, usar esto para crear la cadena.
$Integer = $convert.toInteger($oct[2])
#set ($newoct = $Integer + 1) 
#set ($netmgmt[2] = "$octs[0].$octs[1].$octs[2].$newoct")

Pero tengo muchos de estos para crear y esto se volverá largo y confuso.

Entonces, estoy tratando de averiguar si puedo escribir #set ($octs = $Supernet.split(".")) para almacenar como números enteros. Honestamente, tratar de convertir directamente cada valor de la matriz a int no parece funcionar según lo que he encontrado en línea. ¿Esperaba que lo siguiente diera como resultado “$oct1 = 10”, pero no lo hace?

#set ($Supernet = "10.10.10.10") 
#set ($octs = $Supernet.split("\."))
#set ($oct1 = $convert.toInteger($oct[0])

Soy nuevo en Velocity, cualquier ayuda es apreciada.

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para manipular la dirección IP proporcionada como una cadena, puedes usar el siguiente código:

    #set ($Supernet = "10.10.10.10") 
    #set ($octs = $Supernet.split("\."))
    
    #set ($oct1 = $octs.get(0)?integer)
    #set ($oct2 = $octs.get(1)?integer)
    #set ($oct3 = $octs.get(2)?integer)
    #set ($oct4 = $octs.get(3)?integer)
    
    #set ($newoct3 = $oct3 + 1)
    
    #set ($netmgmt = "$oct1.$oct2.$newoct3.$oct4")
    
    $netmgmt
    

    Aquí tienes una explicación de lo que hace el código:

    • Las primeras dos líneas dividen la cadena en un array de cuatro cadenas, cada una representando un octeto de la dirección IP.
    • Cada octeto debe convertirse a un número entero antes de poder realizar cualquier operación aritmética. La sintaxis ?integer intentará convertir la cadena a un número entero y, si falla, devolverá null.
    • Las siguientes cuatro líneas convierten cada octeto en un número entero y lo almacenan en una variable.
    • La quinta línea incrementa el tercer octeto en 1 y almacena el resultado en una nueva variable.
    • La última línea crea una nueva cadena mediante la concatenación de los cuatro octetos con puntos entre ellos.

    Esto debería darte el resultado deseado de “10.10.11.10”.

Comments are closed.