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.

Necesito insertar la salida del recuento, incrementada desde un bucle ‘for’ dentro de una variable ‘list’ en TCL.

Quiero listar los incrementos en “$ i” del bucle para la variable en modo ‘[lista]’. Luego, podré calcular los valores con ‘[expr]’.

Dejaré aquí un ejemplo didáctico para simplificar la idea. Para ver:

set i 1

while {$i <= 9} {
  global value
  set lst [puts -nonewline "$i "]
  set value [list $lst]
  incr i
}

global value
puts "\n$value"

Result:
enter image description here

Mi dificultad es mantener estos incrementos sucesivos dentro de una variable.

De esta forma:

set value $i

Solo se agrega el último incremento/número a la variable.

Como dije antes, necesito almacenar estos números para calcularlos más tarde. Algo como:

puts [expr [lindex $value 0] + [lindex $value 1]]

Advertencia: Para fines didácticos, hice un ejemplo con un número ordinal y una secuencia de ‘1 a 9’. Pero para mi objetivo actual, estoy recibiendo números aleatorios de uno o más decimales, dejo muy claro a los colegas que puedan ayudar que no sugieran escribir la lista a mano. Una vez que estoy extrayendo líneas de un archivo que contiene 1000 líneas de las cuales están numeradas, eso significa que estoy trabajando con números dinámicos y no secuenciales como muestra la pregunta. Usé ‘1 a 9’ solo para poder ejemplificar el problema. Después de recibir la respuesta, adaptaré la solución a mi script.tcl.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para almacenar los incrementos sucesivos dentro de una variable, se puede utilizar el comando lappend para agregar cada incremento a una lista. Aquí está un ejemplo de fragmento de código:

    set i 1
    set increments {}
    
    while {$i <= 9} {
      lappend increments $i
      incr i
    }
    
    puts "Lista de incrementos: $increments"
    

    Esto producirá la siguiente salida:

    Lista de incrementos: 1 2 3 4 5 6 7 8 9
    

    Ahora se puede utilizar el comando expr para realizar cálculos en la lista de incrementos, como este:

    puts [expr [lindex $increments 0] + [lindex $increments 1]]
    

    Esto imprimirá 3, que es la suma de los dos primeros incrementos en la lista.

    Para adaptar esta solución a un escenario específico de trabajo con números aleatorios de un archivo, se puede modificar el bucle para leer cada número aleatorio del archivo y agregarlo a la lista de incrementos usando lappend. Aquí está un ejemplo de fragmento de código:

    set increments {}
    
    foreach line [split [read $filename] "\n"] {
      set number [string trim $line] ;# eliminar cualquier espacio en blanco
      if {$number ne ""} {
        lappend increments $number
      }
    }
    
    puts "Lista de incrementos: $increments"
    

    Esto leerá cada línea del archivo especificado por la variable filename, eliminará cualquier espacio en blanco y agregará el número resultante a la lista de incrementos.

Comments are closed.