package main import ( "encoding/csv" "fmt" "io" "os" "strconv" ) func LoadCsv(path string, tab bool) { f, err := os.Open(path) if err != nil { fmt.Fprintf(os.Stderr, "Unable to open file %q", path) os.Exit(1) } wb = makeWorkbook(path) wb.sheets = make([]sheet, 0, 1) s := makeSheet("") s.cols = 0 reader := csv.NewReader(f) if tab { reader.Comma = '\t' } for { record, err := reader.Read() if err == io.EOF { break } if err != nil { fmt.Fprintf(os.Stderr, "Err: %s", err.Error()) continue } if s.cols == 0 { s.cols = len(record) s.cells = make([][]cell, 0, 10) } r := make([]cell, len(record)) for i := range record { _, err := strconv.Atoi(record[i]) if err != nil { record[i] = fmt.Sprintf("\"%s\"", record[i]) } r[i].Update(record[i]) } s.cells = append(s.cells, r) } s.rows = len(s.cells) wb.sheets = append(wb.sheets, s) } func WriteCsv(path string, tab bool) { f, err := os.Create(path) if err != nil { // TODO report error panic(err.Error()) } defer f.Close() writer := csv.NewWriter(f) if tab { writer.Comma = '\t' } for _, row := range wb.sheets[wb.sheet].cells { r := make([]string, len(row)) for i, cell := range row { r[i] = cell.mask } if err := writer.Write(r); err != nil { // TODO report error } } writer.Flush() if err := writer.Error(); err != nil { // TODO report error panic(err.Error()) } }