From 7fcdc3ecc0f077ff7ff4ec57c912beae4f974fdb Mon Sep 17 00:00:00 2001 From: Benedict Börger Date: Mon, 17 Dec 2018 21:34:36 +0100 Subject: [finz] inital commit --- src/Csv/mod.rs | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100644 src/Csv/mod.rs (limited to 'src/Csv/mod.rs') diff --git a/src/Csv/mod.rs b/src/Csv/mod.rs new file mode 100644 index 0000000..29e1aca --- /dev/null +++ b/src/Csv/mod.rs @@ -0,0 +1,62 @@ +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 } ) + } +} -- cgit v1.2.3-70-g09d2