diff options
author | emile <hanemile@protonmail.com> | 2018-10-08 17:20:34 +0200 |
---|---|---|
committer | emile <hanemile@protonmail.com> | 2018-10-08 17:20:34 +0200 |
commit | d1ab3a4384d30039be6a3a7800240d5480d93987 (patch) | |
tree | e2317b79bceaa705984e26539ecc9e26cbf91b83 /csv | |
parent | 244477770aa7a97f2dbdd113133defdb299a6013 (diff) |
Handle reading data from external CSV files
Diffstat (limited to 'csv')
-rw-r--r-- | csv/csv.go | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/csv/csv.go b/csv/csv.go new file mode 100644 index 0000000..63783ed --- /dev/null +++ b/csv/csv.go @@ -0,0 +1,68 @@ +package csv + +import ( + "../structs" + "encoding/csv" + "log" + "os" + "strconv" +) + +// openStarCSV opens the file at the given path and reads its content. It then returns the content inform of a slice +// of slices +func openStarCSV(path string) [][]string { + + // Open the file located at the given path + b, err := os.Open(path) + + // Handle errors + if err != nil { + log.Printf("openStarsCSV Panic! (cannot read file from %s)", path) + } + + // Close the file afre reading it's content + defer b.Close() + + // Parse the files conten usin a csv-reader + lines, err := csv.NewReader(b).ReadAll() + + // Handle errors + if err != nil { + log.Println("openStarsCSV Panic! (cannot read the files content)") + } + + return lines +} + +// Import gets a file, a starting line, an ending line and a struct. It then adds the content of the file to the struct +// For finding the length of the .csv, you can use the following command in linux: +// $ cat <csv> | wc -l +func Import(path string, start int, end int, slice []structs.Star) []structs.Star { + lines := openStarCSV(path) + + for linenr, line := range lines[start:end] { + x, errx := strconv.ParseFloat(line[0], 64) + y, erry := strconv.ParseFloat(line[1], 64) + + // Handle errors + if errx != nil { + log.Printf("error reading value from csv in line nr. %d (%s)", linenr, errx) + } + if errx != nil { + log.Printf("error reading value from csv in line nr. %d (%s)", linenr, erry) + } + + // Create a temporary star for assembling the star + tempStar := structs.Star{ + structs.Coord{x, y}, + structs.Force{0, 0}, + 1000000, + } + + // Add the Temporary star to the slice + slice = append(slice, tempStar) + + } + + return slice +} |