Ferrugem - Entrada Saída
Este capítulo discute como aceitar valores da entrada padrão (teclado) e exibir valores para a saída padrão (console). Neste capítulo, também discutiremos a passagem de argumentos de linha de comando.
Tipos de leitor e escritor
Os recursos de biblioteca padrão do Rust para entrada e saída são organizados em torno de duas características -
- Read
- Write
Sr. Não | Traço e descrição | Exemplo |
---|---|---|
1 | Read Os tipos que implementam Read possuem métodos para entrada orientada a bytes. São chamados de leitores |
Stdin, Arquivo |
2 | Write Tipos que implementam Write suportam saída de texto orientada a bytes e UTF-8. Eles são chamados de escritores. |
Stdout, Arquivo |
Ler Traço
Readerssão componentes dos quais seu programa pode ler bytes. Os exemplos incluem a leitura de entrada do teclado, arquivos, etc.read_line() O método desse traço pode ser usado para ler dados, uma linha por vez, de um arquivo ou fluxo de entrada padrão.
Sr. Não | Traço | Método e Descrição |
---|---|---|
1 | Ler | read_line(&mut line)->Result Lê uma linha de texto e a anexa à linha, que é uma String. O valor de retorno é um io :: Result, o número de bytes lidos. |
Ilustração - Leitura do console - stdin ()
Os programas Rust podem ter que aceitar valores do usuário em tempo de execução. O exemplo a seguir lê os valores da entrada padrão (teclado) e os imprime no console.
fn main(){
let mut line = String::new();
println!("Enter your name :");
let b1 = std::io::stdin().read_line(&mut line).unwrap();
println!("Hello , {}", line);
println!("no of bytes read , {}", b1);
}
A função stdin () retorna um identificador para o fluxo de entrada padrão do processo atual, ao qual a função read_line pode ser aplicada. Esta função tenta ler todos os caracteres presentes no buffer de entrada quando encontra um caractere de fim de linha.
Resultado
Enter your name :
Mohtashim
Hello , Mohtashim
no of bytes read , 10
Traço de escrita
Writerssão componentes nos quais seu programa pode gravar bytes. Os exemplos incluem a impressão de valores no console, gravação em arquivos, etc. O método write () desta característica pode ser usado para gravar dados em um arquivo ou fluxo de saída padrão.
Sr. Não | Traço | Método e Descrição |
---|---|---|
1 | Escreva | write(&buf)->Result Grava alguns dos bytes no buffer de fatia no fluxo subjacente. Ele retorna um io :: Result, o número de bytes gravados. |
Ilustração - Escrevendo para o console - stdout ()
A impressão! ou println! macros podem ser usadas para exibir texto no console. No entanto, você também pode usar a função de biblioteca padrão write () para exibir algum texto na saída padrão.
Vamos considerar um exemplo para entender isso.
use std::io::Write;
fn main() {
let b1 = std::io::stdout().write("Tutorials ".as_bytes()).unwrap();
let b2 = std::io::stdout().write(String::from("Point").as_bytes()).unwrap();
std::io::stdout().write(format!("\nbytes written {}",(b1+b2)).as_bytes()).unwrap();
}
Resultado
Tutorials Point
bytes written 15
A função de biblioteca padrão stdout () retorna um identificador para o fluxo de saída padrão do processo atual, para o qual owritefunção pode ser aplicada. O método write () retorna um enum, Result. O unbrap () é um método auxiliar para extrair o resultado real da enumeração. O método de desempacotamento enviará pânico se ocorrer um erro.
NOTE - O arquivo IO é discutido no próximo capítulo.
Argumentos CommandLine
Os argumentos da CommandLine são passados para um programa antes de executá-lo. Eles são como parâmetros passados para funções. Os parâmetros CommandLine podem ser usados para passar valores para a função main () . ostd::env::args() retorna os argumentos da linha de comando.
Ilustração
O exemplo a seguir passa valores como argumentos commandLine para a função main (). O programa é criado em um nome de arquivo main.rs .
//main.rs
fn main(){
let cmd_line = std::env::args();
println!("No of elements in arguments is :{}",cmd_line.len());
//print total number of values passed
for arg in cmd_line {
println!("[{}]",arg); //print all values passed
as commandline arguments
}
}
O programa irá gerar um arquivo main.exe uma vez compilado. Vários parâmetros de linha de comando devem ser separados por espaço. Execute main.exe a partir do terminal como main.exe hello tutorialspoint .
NOTE- hello e tutorialspoint são argumentos de linha de comando.
Resultado
No of elements in arguments is :3
[main.exe]
[hello]
[tutorialspoint]
A saída mostra 3 argumentos, já que main.exe é o primeiro argumento.
Ilustração
O programa a seguir calcula a soma dos valores passados como argumentos de linha de comando. Uma lista de valores inteiros separados por espaço é passada ao programa.
fn main(){
let cmd_line = std::env::args();
println!("No of elements in arguments is
:{}",cmd_line.len());
// total number of elements passed
let mut sum = 0;
let mut has_read_first_arg = false;
//iterate through all the arguments and calculate their sum
for arg in cmd_line {
if has_read_first_arg { //skip the first argument since it is the exe file name
sum += arg.parse::<i32>().unwrap();
}
has_read_first_arg = true;
// set the flag to true to calculate sum for the subsequent arguments.
}
println!("sum is {}",sum);
}
Ao executar o programa como main.exe 1 2 3 4, a saída será -
No of elements in arguments is :5
sum is 10