Creación y descripción del entorno
Clase 17 de 20 • Curso de Rust básico
Resumen
Una necesidad muy común en cualquier lenguaje de programación es la manipulación de archivos. Es decir, tener la posibilidad de capturar y leer el contenido de archivos de configuración u otro tipo de información almacenado en un JSON, CSV, TXT, etc.
Lectura de archivos en Rust
La lectura de un archivo en Rust es una tarea muy simple. Basta con importar fs
desde std
. Recordemos que std
permite acceder al sistema operativo y realizar diversas funcionalidades.
use std::{fs};
const FILENAME: &str = "my_file.csv";
fn main() {
let content: String = fs::read_to_string(FILENAME).unwrap();
println!("{}", content);
}
Con fs::read_to_string
podemos leer un archivo en la raíz del proyecto y siempre es necesario la utilización de unwrap()
para capturar errores, ya que el archivo podría no existir.
Lectura de archivos .csv
Visualicemos el contenido de un archivo .csv
:
Colum1;Colum2;Colum3
Bienvenido;a;Platzi
Podemos capturar ese texto en una simple línea de código, pero hasta aquí tendríamos solo un simple String
que debemos convertir a, en este caso, un CSV para capturar cada valor delimitado por punto y coma.
Para esto, importamos la dependencia csv
en el archivo Cargo.toml
:
[dependencies]
csv = "1.1.6"
La importamos y utilizamos de la siguiente manera:
use csv::{ReaderBuilder};
use std::{fs};
const FILENAME: &str = "my_file.csv";
fn main() {
let content: String = fs::read_to_string(FILENAME).unwrap();
let mut rdr = ReaderBuilder::new().delimiter(b';').from_reader(content.as_bytes());
}
ReaderBuilder
permite leer el contenido capturado previamente con fs
, indicando el tipo de delimitador y el tipo de dato como binario. Convertimos el String
en un Vector
que contiene el contenido de nuestro archivo.
Solo resta recorrer el contenido de nuestro archivo con un ciclo for de la siguiente forma:
// ...
fn main() {
let content: String = fs::read_to_string(FILENAME).unwrap();
let mut rdr = ReaderBuilder::new().delimiter(b';').from_reader(content.as_bytes());
for result in rdr.records() {
println!("{}", result.unwrap().get(0).unwrap().trim());
}
}
Devuelve el vector de registros con records()
y accede a la columna del CSV que necesites con get(1)
en cada iteración. Siempre asegúrate de utilizar unwrap()
para contener los errores.
Es muy frecuente necesitar convertir datos leídos desde un archivo en un JSON o en un Excel. Explora la manipulación de diferentes tipos de archivos en Rust para estar preparado para cualquier necesidad.
Contribución creada por: Kevin Fiorentino.