สนิม - อินพุตเอาต์พุต

บทนี้กล่าวถึงวิธีการรับค่าจากอินพุตมาตรฐาน (แป้นพิมพ์) และแสดงค่าไปยังเอาต์พุตมาตรฐาน (คอนโซล) ในบทนี้เราจะพูดถึงการส่งผ่านอาร์กิวเมนต์บรรทัดคำสั่ง

ประเภทผู้อ่านและนักเขียน

คุณสมบัติไลบรารีมาตรฐานของ Rust สำหรับอินพุตและเอาต์พุตถูกจัดระเบียบไว้สองลักษณะ -

  • Read
  • Write
ซีเนียร์ No ลักษณะและคำอธิบาย ตัวอย่าง
1

Read

ประเภทที่ใช้ Read มีวิธีการป้อนข้อมูลแบบไบต์ พวกเขาเรียกว่าผู้อ่าน

Stdin, ไฟล์
2

Write

ประเภทที่ใช้ Write สนับสนุนทั้งเอาต์พุตข้อความแบบไบต์และ UTF-8 พวกเขาเรียกว่านักเขียน

Stdout ไฟล์

อ่านลักษณะ

Readersเป็นส่วนประกอบที่โปรแกรมของคุณสามารถอ่านไบต์ได้ ตัวอย่างเช่นการอ่านข้อมูลจากแป้นพิมพ์ไฟล์ ฯลฯread_line() วิธีการของลักษณะนี้สามารถใช้เพื่ออ่านข้อมูลทีละบรรทัดจากไฟล์หรือสตรีมอินพุตมาตรฐาน

ซีเนียร์ No ลักษณะ วิธีการและคำอธิบาย
1 อ่าน

read_line(&mut line)->Result

อ่านบรรทัดข้อความและต่อท้ายบรรทัดซึ่งเป็น String ค่าที่ส่งคืนคือ io :: ผลลัพธ์จำนวนไบต์ที่อ่าน

ภาพประกอบ - การอ่านจากคอนโซล - 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 () ของลักษณะนี้สามารถใช้เพื่อเขียนข้อมูลไปยังไฟล์หรือสตรีมเอาต์พุตมาตรฐาน

ซีเนียร์ No ลักษณะ วิธีการและคำอธิบาย
1 เขียน

write(&buf)->Result

เขียนไบต์บางส่วนใน slice buf ไปยังสตรีมพื้นฐาน จะส่งคืน io :: ผลลัพธ์จำนวนไบต์ที่เขียน

ภาพประกอบ - การเขียนลงคอนโซล - 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 () ส่งคืน enum ผลลัพธ์ การแกะ () เป็นวิธีการช่วยในการดึงผลลัพธ์ที่แท้จริงจากการแจงนับ วิธีการแกะจะส่งความตื่นตระหนกหากเกิดข้อผิดพลาด

NOTE - ไฟล์ IO จะกล่าวถึงในบทถัดไป

อาร์กิวเมนต์บรรทัดคำสั่ง

อาร์กิวเมนต์ CommandLine ถูกส่งไปยังโปรแกรมก่อนที่จะดำเนินการ เป็นเหมือนพารามิเตอร์ที่ส่งผ่านไปยังฟังก์ชัน สามารถใช้พารามิเตอร์ 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 จากสถานีเป็นtutorialspoint สวัสดี main.exe

NOTE- สวัสดีและtutorialspointเป็นอาร์กิวเมนต์บรรทัดคำสั่ง

เอาต์พุต

No of elements in arguments is :3
[main.exe]
[hello]
[tutorialspoint]

ผลลัพธ์จะแสดง 3 อาร์กิวเมนต์เนื่องจากmain.exeเป็นอาร์กิวเมนต์แรก

ภาพประกอบ

โปรแกรมต่อไปนี้จะคำนวณผลรวมของค่าที่ส่งผ่านเป็นอาร์กิวเมนต์บรรทัดคำสั่ง ค่าจำนวนเต็มของรายการที่คั่นด้วยช่องว่างจะถูกส่งผ่านไปยังโปรแกรม

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.exe 1 2 3 4 ผลลัพธ์จะเป็น -

No of elements in arguments is :5
sum is 10