csv.go 992 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. package main
  2. import (
  3. "encoding/csv"
  4. "fmt"
  5. "io"
  6. "strconv"
  7. )
  8. type statsFunc func(data []float64) float64
  9. func sum(data []float64) float64 {
  10. sum := 0.0
  11. for _, v := range data {
  12. sum += v
  13. }
  14. return sum
  15. }
  16. func avg(data []float64) float64 {
  17. return sum(data) / float64(len(data))
  18. }
  19. func csv2float(r io.Reader, column int) ([]float64, error) {
  20. // Create the CSV Reader used to read in data from CSV files
  21. cr := csv.NewReader(r)
  22. // Adjusting for 0 based index
  23. column--
  24. // Read in all CSV data
  25. allData, err := cr.ReadAll()
  26. if err != nil {
  27. return nil, fmt.Errorf("cannot read data from file: %w", err)
  28. }
  29. var data []float64
  30. for i, row := range allData {
  31. if i == 0 {
  32. continue
  33. }
  34. if len(row) <= column {
  35. return nil, fmt.Errorf("%w: file has only %d columns", ErrInvalidColumn, len(row))
  36. }
  37. v, err := strconv.ParseFloat(row[column], 64)
  38. if err != nil {
  39. return nil, fmt.Errorf("%w: %s", ErrNotNumber, err)
  40. }
  41. data = append(data, v)
  42. }
  43. return data, nil
  44. }