use std::fs::File; use std::io; use std::io::BufRead; /** Represents a CSV file **/ pub struct CsvFile { path : String, delim : String, pub header : Vec, pub content : Vec>, has_header : bool } impl CsvFile { pub fn new(path: &str, delim: &str, header: bool) -> CsvFile { CsvFile { path : String::from(path), delim: String::from(delim), header : Vec::new(), content : Vec::new(), has_header : header } } // TODO nicht gleich viele spalten fn parse_line(line : String, delim: &str) -> Vec { let mut columns : Vec = Vec::new(); for column in line.split(delim).collect::>() { columns.push(column.to_string()); } columns } pub fn read_file(path: &str, delim: &str, header: bool) -> Result { let fd = File::open(path)?; let reader = io::BufReader::new(fd); let mut column_names : Vec = Vec::new(); let mut lines : Vec> = Vec::new(); let mut first = true; for line in reader.lines() { let line = line?; if header && first { column_names.append(&mut CsvFile::parse_line(line, delim)); first = false; } else { lines.push(CsvFile::parse_line(line, delim)); } } Ok(CsvFile { path: String::from(path), delim : String::from(delim), header : column_names, content : lines, has_header: header } ) } }