En esta nueva entrega me gustaría compartir un pequeño tutorial sobre el cómo podemos crear y leer el contenido de archivos de nuestro sistema utilizando Ruby. Una tarea sin duda muy importante si somos desarrolladores en el lenguaje. 🤯
Es un tutorial muy interesante, ya que esta cargado de atributos y métodos que quizás desconocías.
Así que sin más introducción, comencemos con el tutorial. 😎
Lectura de archivos
Comencemos con algo sencillo, por ejemplo, leamos el contenido de un archivo del sistema. Para ello haremos uso del método open de la clase File.
file = File.open('cursos.txt')
Por ejemplo, en mi caso me interesa conocer el contenido del archivo cursos.txt. El cual almacena lo siguiente.
Curso profesional de Ruby
Curso de Ruby on Rails
Pruebas automatizadas en Ruby
A través del objeto file podre conocer el contenido del archivo.
puts file.read
Si ejecutamos visualizaremos el contenido de dicho archivo.
ruby main.rb
Curso profesional de Ruby
Curso de Ruby on Rails
Pruebas automatizadas en Ruby
Si por su parte queremos iterar sobre cada una de las líneas el método readlines nos será de mucha útilidad.
file.readlines.each do |line|
puts line
end
Obtendríamos la misma salida, solo que ahora tenemos un bloque para poder trabajar de forma independiente con cada una de las líneas del archivo.
Por ejemplo.
file.readlines.each do |line|
if line.start_with? 'Curso'
puts line
end
end
Ahora solo visualizaremos en consola todas las líneas que comiencen con la palabra 'Curso'.
Algo muy recomendable es siempre cerrar el archivo cuando lo dejemos de utilizar, dando la posibilidad que otros procesos pueden hacer uso de él. 💻
file.close
Una alternativa para conocer el contenido de un archivo (Y no tener que abrir y cerrar el archivo) es hacer uso del método read directamente.
cursos = File.read('cursos.txt').split('\n')
puts cursos
Para este ejemplo almaceno en la variable cursos un listado de cada uno de las líneas del archivo.
$ ruby main.rb
Curso profesional de Ruby
Curso de Ruby on Rails
Pruebas automatizadas en Ruby
Crear archivos 💾
Listo, ya sabemos obtener el contenido de un archivo, ahora toca el turno de crearlos. Es una tarea relativamente sencilla.
Veamos un par de ejemplos.
data = "Hola, este es un archivo con\nSaltos de línea"
File.open('codigofacilito.txt', 'w') do |file|
file.write(data)
end
Utilizando el método write del objeto File seremos capaces de escribir en él.
Por default la función open abrirá el archivo en modo lectura (como pudimos observar en los ejemplos anteriores), sin embargo si deseamos escribir sobre él, colocamos como segundo argumento w, haciendo referencia a un modo escritura.
Ojo, es importante mencionar que al utilizar w como modo de trabajo, si el archivo no existe en el sistema entonces Ruby procede a crearlo, y en caso el archivo sí exista, entonces el contenido será reemplazado. 🤓
Si queremos crear/escribir sobre un archivo en una sola línea de código es posible.
File.open('codigofacilito.txt', 'w') { |file| file.write(data) }
Aun que recordemos, la legibilidad cuenta.
Ahora, si lo que deseamos es añadir al final del archivo nuevo contenido, entonces haremos uso de a como modo de trabajo (append) (Añade al final). 🤗
File.open('codigofacilito.txt', 'a') do |file|
file.write("Esta es una nueva línea dentro del archivo\n")
end
Método del objeto 🕵️♀️
Ya para finalizar me gustaría compartir un listado de métodos que podemos utilizar con la clase File. Listado que sin duda nos serán de mucha utilidad.
Clase File.
# Renombra el archivo
File.rename 'last-name.txt', 'new-name.txt'
# Retorna el tamaño del archivo
File.size 'codigofacilito.txt'
45
#Retorna verdadero o falso dependiendo si el archivo existe o no
File.exists?'codigofacilito.txt'
true
#Retorna verdadero o falso dependiendo si la ruta es o no un archivo
File.file? 'codigofacilito.txt'
true
#Retorna el nombre del archivo
File.basename 'codigofacilito.txt'
codigofacilito.txt
#Retorna verdadero la ruta del archivo
File.dirname 'profacilito/codigofacilito.txt'
profacilito
#Retorna la extensión del archivo
File.extname 'codigofacilito.txt'
.txt
# Modifica los permisos del archivo
File.chmod(0777 ,'codigofacilito.txt')
# Elimina un archivo en especifico
File.delete 'codigofacilito.txt'
# Nos permite conocer si el archivo es un ejecutable o no
File.executable 'codigofacilito.txt'