Как реализовать черту push(&self, row: &csv::StringRecord)
ниже?
Входные данные являются ссылкой на csv::StringRecord
из библиотеки rust-csv
. Идея состоит в том, чтобы добавить каждый столбец к его вектору.
extern crate csv;
#[derive(Debug)]
struct DataFrame {
header: csv::StringRecord,
name: Vec<String>,
datetime: Vec<String>,
speed: Vec<f32>,
}
impl DataFrame {
fn new() -> DataFrame {
DataFrame {
header: csv::StringRecord::new(),
name: Vec::new(),
datetime: Vec::new(),
speed: Vec::new(),
}
}
fn read_csv(filepath: &str, has_headers: bool) -> DataFrame {
// Open file
let file = std::fs::File::open(filepath).unwrap();
let mut rdr = csv::ReaderBuilder::new()
.has_headers(has_headers)
.from_reader(file);
// Add values to struct
let mut empty_dataframe = DataFrame::new();
empty_dataframe.header = rdr.headers().unwrap().clone();
for result in rdr.records() {
empty_dataframe.push(&result.unwrap());
}
empty_dataframe
}
fn push(&self, row: &csv::StringRecord) {
println!("{:?}", row);
//self.name.push(name);
//self.datetime.push(datetime);
//self.speed.push(speed);
}
}
fn main() {
let data = DataFrame::read_csv("src/data.csv", true);
println!("{:?}", data);
}
Cargo.toml
имеет следующую зависимость (версия важна, так как ReaderBuilder
доступна только после версии 1.
[dependencies]
csv = "1.0.0-beta.5"
data.csv
в следующем формате:
>>> head src/data.csv
Name,DateTime,Speed
Tom,2016-01-04 09:30:00.038279090,102.44
Tom,2016-01-04 09:30:00.038279090,102.44