Leyendo un archivo

RustRustBeginner
Practicar Ahora

This tutorial is from open-source community. Access the source code

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

Introducción

Bienvenido a Leer un archivo. Esta práctica es parte del Rust Book. Puedes practicar tus habilidades de Rust en LabEx.

En esta práctica, agregamos funcionalidad para leer el archivo especificado en el argumento file_path mediante el método fs::read_to_string, y luego imprimimos el contenido del archivo.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/BasicConceptsGroup(["Basic Concepts"]) rust(("Rust")) -.-> rust/DataTypesGroup(["Data Types"]) rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust(("Rust")) -.-> rust/DataStructuresandEnumsGroup(["Data Structures and Enums"]) rust/BasicConceptsGroup -.-> rust/variable_declarations("Variable Declarations") rust/DataTypesGroup -.-> rust/string_type("String Type") rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") rust/DataStructuresandEnumsGroup -.-> rust/method_syntax("Method Syntax") subgraph Lab Skills rust/variable_declarations -.-> lab-100419{{"Leyendo un archivo"}} rust/string_type -.-> lab-100419{{"Leyendo un archivo"}} rust/function_syntax -.-> lab-100419{{"Leyendo un archivo"}} rust/expressions_statements -.-> lab-100419{{"Leyendo un archivo"}} rust/method_syntax -.-> lab-100419{{"Leyendo un archivo"}} end

Leyendo un archivo

Ahora agregaremos funcionalidad para leer el archivo especificado en el argumento file_path. Primero necesitamos un archivo de muestra para probarlo: usaremos un archivo con un poco de texto en múltiples líneas con algunas palabras repetidas. La Lista 12-3 tiene un poema de Emily Dickinson que funcionará bien. Crea un archivo llamado poema.txt en el nivel raíz de tu proyecto y escribe el poema "¡Soy nadie! ¿Quién eres tú?".

Nombre del archivo: poem.txt

¡Soy nadie! ¿Quién eres tú?
¿Eres nadie también?
Entonces somos un par - ¡no lo cuentes!
Sabes, nos expulsarían.

¡Qué aburrido ser alguien!
¡Qué público, como una rana
Decir tu nombre durante todo el día
A una pantano admirador!

Lista 12-3: Un poema de Emily Dickinson es un buen caso de prueba.

Con el texto en su lugar, edita src/main.rs y agrega código para leer el archivo, como se muestra en la Lista 12-4.

Nombre del archivo: src/main.rs

use std::env;
1 use std::fs;

fn main() {
    --snip--
    println!("In file {}", file_path);

  2 let contents = fs::read_to_string(file_path)
       .expect("Should have been able to read the file");

  3 println!("With text:\n{contents}");
}

Lista 12-4: Leyendo el contenido del archivo especificado por el segundo argumento

Primero traemos una parte relevante de la biblioteca estándar con una declaración use: necesitamos std::fs para manejar archivos [1].

En main, la nueva declaración fs::read_to_string toma el file_path, abre ese archivo y devuelve un std::io::Result<String> con el contenido del archivo [2].

Después de eso, agregamos nuevamente una declaración temporal println! que imprime el valor de contents después de leer el archivo, para que podamos comprobar que el programa está funcionando hasta ahora [3].

Ejecutemos este código con cualquier cadena como primer argumento de línea de comandos (porque aún no hemos implementado la parte de búsqueda) y el archivo poema.txt como segundo argumento:

$ cargo run -- the poem.txt
   Compiling minigrep v0.1.0 (file:///projects/minigrep)
    Finished dev [unoptimized + debuginfo] target(s) in 0.0s
     Running `target/debug/minigrep the poem.txt`
Searching for the
In file poem.txt
With text:
¡Soy nadie! ¿Quién eres tú?
¿Eres nadie también?
Entonces somos un par - ¡no lo cuentes!
Sabes, nos expulsarían.

¡Qué aburrido ser alguien!
¡Qué público, como una rana
Decir tu nombre durante todo el día
A una pantano admirador!

¡Excelente! El código leyó y luego imprimió el contenido del archivo. Pero el código tiene algunos fallos. En este momento, la función main tiene múltiples responsabilidades: generalmente, las funciones son más claras y fáciles de mantener si cada función es responsable de solo una idea. El otro problema es que no estamos manejando los errores tan bien como podríamos. El programa todavía es pequeño, así que estos fallos no son un gran problema, pero a medida que el programa crece, será más difícil corregirlos de manera limpia. Es una buena práctica comenzar a refactorizar temprano durante el desarrollo de un programa porque es mucho más fácil refactorizar cantidades más pequeñas de código. Lo haremos a continuación.

Resumen

¡Felicidades! Has completado la práctica de Leer un archivo. Puedes practicar más prácticas en LabEx para mejorar tus habilidades.