IROX CSV Encoder/Decoder

Inspired by Python's csv module, a very basic csv reader & writer.

The primary use-case of this library is interacting with unstructured, variably structured, or dubiously structured data. As such, you probably want the far more robust and far better implemented csv crate.

Goals: * Provide a String-based mechanism to read and write CSV files in rfc4180 format. * Handle mixed formats resiliently, such as mismatched and newlines within quotes.

Non-Goals: * Any interpretation of the contents of the CSV structure itself - everything is an owned String * serde support - if you need it, go use the csv crate.

Examples:

fn iterexample() -> Result<(), CSVError> { let mut input = iroxcsv::CSVReader::new(std::io::stdin()); loop { // iterate over each line of the input let line : Option> = input.read_line()?; match line { Some(fields) => { // Use the individual fields of the CSV line println!("{:?}", fields); // fields : Vec } None => { // EOF break; } } } Ok(()) } ```

fn mapexample() -> Result<(), CSVError> { let mut maps = iroxcsv::CSVMapReader::new(std::io::stdin()); loop { // iterate over each line of the input let mayberow : Option = maps.nextrow()?; match mayberow { Some(row) => { // Use the individual fields of the CSV line as a key-value map // The keys are the column headers found in the first row, the values are the matching row entry let map = row.intomap_lossy(); println!("{:?}", map); // map : BTree } None => { // EOF break; } } } Ok(()) } ```