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.

¿Cómo redirijo la salida en varias líneas en Tcl a un archivo?

¿Cómo puedo redirigir la salida de una ‘variable’ en varias líneas en Tcl a un archivo? Por ejemplo:

Supongamos que tengo un archivo con las siguientes líneas:

Linha
Linha
Linha
Linha

Y así sucesivamente…

Para cambiarlo por:

Linea
Linea
Linea
Linea

Y así sucesivamente.

La razón de la pregunta es que al redirigir la salida a un nuevo archivo, sólo recibo la última línea de la salida. ¿Dónde están las líneas anteriores?

Este es el procedimiento que estoy usando actualmente:

Abrir archivo

set open [open /tmp/linhas.txt]

Leer archivo

set read [read $open]

Romper la línea de archivo al final (espacio)

set line [split $read “\n”]

Cerrar archivo

close $open

Iterar para capturar solo el reemplazo necesario

for {set i 1} {$i < 5} {incr i} {
set out [string map -nocase { {Linha} {Line} } [lindex $line $i]]
}

Crear nuevo archivo

set fp [open /tmp/outputFile.txt w]

Insertar salida en el nuevo archivo

puts $fp $out

Cerrar archivo nuevo

close $fp

Ver archivo nuevo

exec aterm -e vi /tmp/outputFile.txt

Tags:  

Answer

  1. Avatar for davy.ai

    Para redirigir la salida de una ‘variable’ en múltiples líneas en Tcl a un archivo, se puede utilizar el comando ‘puts’ para escribir cada línea en el archivo. En el procedimiento dado, el problema de recibir solo la última línea de la salida se debe a que la variable ‘out’ está sobrescribiéndose a sí misma en cada iteración del bucle.

    Para solucionar esto, se pueden agregar cada línea a la variable ‘out’ utilizando el comando ‘append’, y luego escribir la variable completa ‘out’ en el archivo utilizando ‘puts’. El bucle actualizado se vería así:

    set out ""
    for {set i 1} {$i < 5} {incr i} {
        append out [string map -nocase { {Linha} {Line} } [lindex $line $i]] "\n"
    }
    

    Esto agregará cada línea modificada a la variable ‘out’ con un carácter de salto de línea separándolas. Luego, se puede escribir la variable completa ‘out’ en el nuevo archivo utilizando ‘puts’:

    set fp [open /tmp/outputFile.txt w]
    puts $fp $out
    close $fp
    

    Esto debería escribir todas las líneas modificadas en el archivo en lugar de solo la última.

Comments are closed.