さび-入力出力

この章では、標準入力(キーボード)から値を受け入れ、標準出力(コンソール)に値を表示する方法について説明します。この章では、コマンドライン引数の受け渡しについても説明します。

リーダーとライターのタイプ

入力と出力のための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