tally/csvLoader.go

81 lines
1.4 KiB
Go

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())
}
}