Files
coolStats/csv.go
2023-07-12 15:05:07 +03:00

50 lines
976 B
Go

package main
import (
"encoding/csv"
"fmt"
"io"
"strconv"
)
type statsFunc func(data []float64) float64
func sum(data []float64) float64 {
sum := 0.0
for _, v := range data {
sum += v
}
return sum
}
func avg(data []float64) float64 {
return sum(data) / float64(len(data))
}
func csv2float(r io.Reader, column int) ([]float64, error) {
cr := csv.NewReader(r)
if column < 1 {
return nil, fmt.Errorf("%w: please provide a valid column number", ErrInvalidColumn)
}
column--
allData, err := cr.ReadAll()
if err != nil {
return nil, fmt.Errorf("cannot read data from file: %w", err)
}
var data []float64
for i, row := range allData {
if i == 0 {
continue
}
if len(row) <= column {
return nil, fmt.Errorf("%w: File has only %d columns", ErrInvalidColumn, len(row))
}
v, err := strconv.ParseFloat(row[column], 64)
if err != nil {
return nil, fmt.Errorf("%w: %s", ErrNotNumber, err)
}
data = append(data, v)
}
return data, nil
}