@@ 1,12 1,13 @@
package main
import (
+ "encoding/csv"
"flag"
"fmt"
"log"
"os"
- "github.com/trimmer-io/go-csv"
+ "github.com/jszwec/csvutil"
)
func main() {
@@ 20,7 21,16 @@ func main() {
var rows []Row
- dec := csv.NewDecoder(os.Stdin)
+ header, err := csvutil.Header(Row{}, "")
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ dec, err := csvutil.NewDecoder(csv.NewReader(os.Stdin), header...)
+ if err != nil {
+ log.Fatal(err)
+ }
+
if err := dec.Decode(&rows); err != nil {
log.Fatal(err)
}
@@ 61,23 71,29 @@ func main() {
// summary
fmt.Fprintf(os.Stderr, "total %.2f, debits %.2f, credits %.2f", debits+credits, debits, credits)
+ writer := csv.NewWriter(os.Stdout)
+ enc := csvutil.NewEncoder(writer)
+
// unpaid
if *opts.unpaid {
var unpaid float64
var i int
- enc := csv.NewEncoder(os.Stdout)
-
// TODO: improve float comparison hack
for i = len(rows) - 1; int(((debits+credits)-unpaid)*100) > 0; i-- {
if a := rows[i].Amount(); a > 0 {
unpaid += a
- enc.EncodeRecord(rows[i])
+ enc.Encode(rows[i])
}
}
fmt.Fprintf(os.Stderr, ", unpaid %.2f", unpaid)
+ } else {
+ for i := len(rows) - 1; i >= 0; i-- {
+ enc.Encode(rows[i])
+ }
}
+ writer.Flush()
fmt.Fprintf(os.Stderr, "\n")
}