81 lines
1.4 KiB
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())
|
|
}
|
|
}
|
|
|