さび-入力出力
この章では、標準入力(キーボード)から値を受け入れ、標準出力(コンソール)に値を表示する方法について説明します。この章では、コマンドライン引数の受け渡しについても説明します。
リーダーとライターのタイプ
入力と出力のためのRustの標準ライブラリ機能は、2つの特性を中心に構成されています-
- Read
- Write
シニア番号 | 特性と説明 | 例 |
---|---|---|
1 | Read Readを実装するタイプには、バイト指向の入力用のメソッドがあります。彼らは読者と呼ばれています | Stdin、File |
2 | Write 書き込みを実装するタイプは、バイト指向とUTF-8の両方のテキスト出力をサポートします。彼らは作家と呼ばれています。 | Stdout、File |
特性を読む
Readersプログラムがバイトを読み取ることができるコンポーネントです。例としては、キーボードやファイルなどからの入力の読み取りがあります。read_line() この特性の方法を使用して、ファイルまたは標準入力ストリームから一度に1行ずつデータを読み取ることができます。
シニア番号 | 特性 | 方法と説明 |
---|---|---|
1 | 読んだ | read_line(&mut line)->Result テキストの行を読み取り、それを文字列である行に追加します。戻り値は、読み取られたバイト数であるio :: Resultです。 |
イラスト-コンソールからの読み取り-stdin()
Rustプログラムは、実行時にユーザーからの値を受け入れる必要がある場合があります。次の例では、標準入力(キーボード)から値を読み取り、コンソールに出力します。
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);
}
STDIN()関数は、そのために、現在のプロセスの標準入力ストリームへのハンドルを返すREAD_LINE関数を適用することができます。この関数は、行末文字を検出すると、入力バッファーに存在するすべての文字を読み取ろうとします。
出力
Enter your name :
Mohtashim
Hello , Mohtashim
no of bytes read , 10
トレイトを書く
Writersプログラムがバイトを書き込むことができるコンポーネントです。例としては、コンソールへの値の出力、ファイルへの書き込みなどがあります。この特性のwrite()メソッドを使用して、ファイルまたは標準出力ストリームにデータを書き込むことができます。
シニア番号 | 特性 | 方法と説明 |
---|---|---|
1 | 書く | write(&buf)->Result スライスbufのバイトの一部を基になるストリームに書き込みます。書き込まれたバイト数であるio :: Resultを返します。 |
イラスト-コンソールへの書き込み-stdout()
プリント!またはprintln!マクロを使用して、コンソールにテキストを表示できます。ただし、write()標準ライブラリ関数を使用して、標準出力にテキストを表示することもできます。
これを理解するための例を考えてみましょう。
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();
}
出力
Tutorials Point
bytes written 15
STDOUT()標準ライブラリ関数は、現在のプロセスの標準出力ストリームへのハンドルを返すまでwrite機能を適用することができます。write()メソッドは列挙型Resultを返します。unwrap()は、列挙から実際の結果を抽出するためのヘルパーメソッドです。エラーが発生した場合、unwrapメソッドはパニックを送信します。
NOTE −ファイルIOについては、次の章で説明します。
コマンドライン引数
コマンドライン引数は、プログラムを実行する前にプログラムに渡されます。これらは、関数に渡されるパラメーターのようなものです。CommandLineパラメーターを使用して、main()関数に値を渡すことができます。ザ・std::env::args() コマンドライン引数を返します。
図
次の例では、値をcommandLine引数としてmain()関数に渡します。プログラムは、ファイル名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
}
}
プログラムは、コンパイルされるとファイルmain.exeを生成します。複数のコマンドラインパラメータはスペースで区切る必要があります。などの端末からMAIN.EXEを実行MAIN.EXEハローtutorialspoint。
NOTE-ハローとtutorialspointは、コマンドライン引数です。
出力
No of elements in arguments is :3
[main.exe]
[hello]
[tutorialspoint]
main.exeが最初の引数であるため、出力には3つの引数が表示されます。
図
次のプログラムは、コマンドライン引数として渡された値の合計を計算します。スペースで区切られた整数値のリストがプログラムに渡されます。
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);
}
プログラムをmain.exe1 2 3 4として実行すると、出力は次のようになります。
No of elements in arguments is :5
sum is 10