RosettaCodeData/Task/CSV-data-manipulation/Go/csv-data-manipulation.go

59 lines
971 B
Go
Raw Permalink Normal View History

2023-07-01 11:58:00 -04:00
package main
import (
2026-02-01 16:33:20 -08:00
"encoding/csv"
"log"
"os"
"strconv"
2023-07-01 11:58:00 -04:00
)
func main() {
2026-02-01 16:33:20 -08:00
rows := readSample()
appendSum(rows)
writeChanges(rows)
2023-07-01 11:58:00 -04:00
}
func readSample() [][]string {
2026-02-01 16:33:20 -08:00
f, err := os.Open("sample.csv")
if err != nil {
log.Fatal(err)
}
rows, err := csv.NewReader(f).ReadAll()
f.Close()
if err != nil {
log.Fatal(err)
}
return rows
2023-07-01 11:58:00 -04:00
}
func appendSum(rows [][]string) {
2026-02-01 16:33:20 -08:00
rows[0] = append(rows[0], "SUM")
for i := 1; i < len(rows); i++ {
rows[i] = append(rows[i], sum(rows[i]))
}
2023-07-01 11:58:00 -04:00
}
func sum(row []string) string {
2026-02-01 16:33:20 -08:00
sum := 0
for _, s := range row {
x, err := strconv.Atoi(s)
if err != nil {
return "NA"
}
sum += x
}
return strconv.Itoa(sum)
2023-07-01 11:58:00 -04:00
}
func writeChanges(rows [][]string) {
2026-02-01 16:33:20 -08:00
f, err := os.Create("output.csv")
if err != nil {
log.Fatal(err)
}
err = csv.NewWriter(f).WriteAll(rows)
f.Close()
if err != nil {
log.Fatal(err)
}
2023-07-01 11:58:00 -04:00
}