สนิม - อินพุตเอาต์พุต
บทนี้กล่าวถึงวิธีการรับค่าจากอินพุตมาตรฐาน (แป้นพิมพ์) และแสดงค่าไปยังเอาต์พุตมาตรฐาน (คอนโซล) ในบทนี้เราจะพูดถึงการส่งผ่านอาร์กิวเมนต์บรรทัดคำสั่ง
ประเภทผู้อ่านและนักเขียน
คุณสมบัติไลบรารีมาตรฐานของ 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