Rust:
การทำงานกับ CSV
วิธีการ:
Rust ด้วยความสนใจในเรื่องความปลอดภัยและประสิทธิภาพ ได้เสนอ crates (ไลบรารี) ที่ยอดเยี่ยมสำหรับการจัดการกับไฟล์ CSV โดย csv
เป็นตัวที่ได้รับความนิยมมากที่สุด คุณก็จำเป็นต้องใช้ serde
สำหรับการ serialize และ deserialize ข้อมูล
ก่อนอื่นเพิ่ม dependencies ในไฟล์ Cargo.toml
ของคุณ:
[dependencies]
csv = "1.1"
serde = { version = "1.0", features = ["derive"] }
การอ่าน CSV
ในการอ่านไฟล์ CSV กำหนด struct ที่แสดงถึงข้อมูลของคุณและ derive Deserialize
จาก serde
:
use serde::Deserialize;
use std::error::Error;
use std::fs::File;
use std::io;
use std::process;
#[derive(Debug, Deserialize)]
struct Record {
city: String,
state: String,
population: u64,
}
fn read_from_csv(file_path: &str) -> Result<(), Box<dyn Error>> {
let file = File::open(file_path)?;
let mut rdr = csv::Reader::from_reader(file);
for result in rdr.deserialize() {
let record: Record = result?;
println!("{:?}", record);
}
Ok(())
}
fn main() {
if let Err(err) = read_from_csv("cities.csv") {
println!("error running example: {}", err);
process::exit(1);
}
}
ตัวอย่างผลลัพธ์สำหรับ CSV ที่มีข้อมูลเมืองอาจดูเช่นนี้:
Record { city: "Seattle", state: "WA", population: 744955 }
Record { city: "New York", state: "NY", population: 8336817 }
การเขียนลงไปใน CSV
ในการเขียนลงไปในไฟล์ CSV กำหนด struct และ derive Serialize
:
use serde::Serialize;
use std::error::Error;
use std::fs::File;
#[derive(Serialize)]
struct Record {
city: String,
state: String,
population: u64,
}
fn write_to_csv(file_path: &str, records: Vec<Record>) -> Result<(), Box<dyn Error>> {
let file = File::create(file_path)?;
let mut wtr = csv::Writer::from_writer(file);
for record in records {
wtr.serialize(&record)?;
}
wtr.flush()?;
Ok(())
}
fn main() -> Result<(), Box<dyn Error>> {
let records = vec![
Record {
city: "Los Angeles".into(),
state: "CA".into(),
population: 3979563,
},
Record {
city: "Chicago".into(),
state: "IL".into(),
population: 2695598,
},
];
write_to_csv("output.csv", records)?;
Ok(())
}
นี่จะสร้าง output.csv
ด้วยข้อมูล:
city,state,population
Los Angeles,CA,3979563
Chicago,IL,2695598
โดยใช้ประโยชน์จากระบบประเภทข้อมูลที่มีประสิทธิภาพของ Rust และ crates ที่เชื่อถือได้จากระบบนิเวศ การทำงานด้วยข้อมูล CSV จึงทำได้อย่างทั้งมีประสิทธิภาพและง่ายดาย รับประกันความปลอดภัยและประสิทธิภาพในงานการประมวลผลข้อมูลของคุณ