6 nov. 2018

Programa - Cambiar una línea de un fichero

=begin
Con este programa queremos modificar una línea de un fichero.
*Primero pasamos el fichero a una matriz @ma
*Preguntamos qué línea es la que quieres mostrar y si la quieres modificar o borrar
*Pide que se introduzca la modificación y la sustituye en la posición adecuada de la matriz
*Lo almacena en un nuevo fichero
*Renombra el primer fichero origen significados.txt con la extensión bak: significados.bak
*Renombra el segundo fichero respaldo.txt con el nombre del primero significados.txt
NOTA: Podríamos borrar el fichero significados.bak así--> File.delete ('significados.bak')
=end
# encoding: WINDOWS-1252
@sig='significados.txt'
f=File.open(@sig, "a+")
@l=0
@ma=[]
f.each do |@a|
@l+=1
@ma[@l]=@a
puts "Línea #{@l} = #{@a}"
end
f.close
#puts @ma

puts "El fichero tiene #{@l} líneas"
puts "¿Qué línea quieres que te muestre?"
STDOUT.flush
@n=gets.chomp.to_i
if @n>@l
puts "Sólo puedes escribir hasta el #{@l}"
puts "¿Qué línea quieres que te muestre?"
STDOUT.flush
@n=gets.chomp.to_i
end
puts "La línea #{@n} es #{@ma[@n]}"
puts "Esto es la línea #{@n} de la matriz formada a partir del fichero = #{@ma[@n]}"
puts "¿Quieres modificarlo (m/M) o borrarlo (b/B)?"
STDOUT.flush
preg=gets.chomp
if preg =="m" or preg =="M"
puts "Escribe la modificación:"
STDOUT.flush
@modificar=gets.chomp
@ma[@n]=@modificar
puts "La línea #{@n} = #{@ma[@n]}"
fa=File.open("respaldo.txt", "a+")
for k in (1..@l)
fa.puts @ma[k]
end
fa.close
File.rename (@sig, 'significados.bak')
File.rename ('respaldo.txt', @sig)
end

if preg =="b" or preg =="B"
@ma.delete (@ma[@n])
puts "La línea #{@n} = #{@ma[@n]} = HA SIDO BORRADA"
faa=File.open('respaldo.txt', "a+")
for ka in (1..@l-1)
faa.puts @ma[ka]
end
faa.close
File.rename (@sig, 'significados.bak')
File.rename ('respaldo.txt', @sig)
end
puts "Adios"