Skip to main content

sciforge_parser/csv/
writer.rs

1pub fn write_csv(header: &[&str], rows: &[Vec<String>]) -> String {
2    let mut out = String::new();
3    for (i, h) in header.iter().enumerate() {
4        if i > 0 {
5            out.push(',');
6        }
7        write_field(&mut out, h);
8    }
9    for row in rows {
10        out.push('\n');
11        for (i, field) in row.iter().enumerate() {
12            if i > 0 {
13                out.push(',');
14            }
15            write_field(&mut out, field);
16        }
17    }
18    out
19}
20
21fn write_field(out: &mut String, field: &str) {
22    if field.contains(',') || field.contains('"') || field.contains('\n') {
23        out.push('"');
24        for c in field.chars() {
25            if c == '"' {
26                out.push('"');
27            }
28            out.push(c);
29        }
30        out.push('"');
31    } else {
32        out.push_str(field);
33    }
34}