package main
import (
"fmt"
"io/ioutil"
"os"
"strconv"
"strings"
)
func check(e error) {
if e != nil {
panic(e)
}
}
func analyze(msg string) {
var total float64
var min float64
var max float64
var numlines float64
total = 0
numlines = 0
max = 0
min = 1000000000
dat2 := make([]string, 200)
// read the file
dat, err := ioutil.ReadFile(msg)
check(err)
dat2 = strings.Split(string(dat), "\r\n")
// iterate through the text file
for i := 0; i < len(dat2); i++ {
//fmt.Println("inside for loop", i)
if fig, err := strconv.ParseFloat(dat2[i], 64); err == nil {
//total + new value
total = total + fig
numlines = numlines + 1
if min > fig {
min = fig
}
if max < fig {
max = fig
}
//fmt.Println(fig)
} else {
// print error if not parsed
fmt.Println(err)
break
}
}
fmt.Println("Analysis of file:", msg)
fmt.Println("Total is:", total)
fmt.Println("Total figures:", numlines)
fmt.Println("Average is:", total/numlines)
fmt.Println("Max: ", max, "Min: ", min)
}
func main() {
var mystring string
myslice := make([]string, 3)
myslice[0] = "random_numbers1.txt"
myslice[1] = "random_numbers2.txt"
myslice[2] = "random_numbers3.txt"
for i := 0; i < len(myslice); i++ {
// trigger analyze as go routine
// no need to use channels as we dont need to Queue anything
go analyze(myslice[i])
}
for {
fmt.Println("\r\n Enter Filename:")
fmt.Scanln(&mystring)
fmt.Printf("%s", mystring)
if mystring == "q" {
os.Exit(0)
} else {
go analyze(mystring)
}
}
}
No comments:
Post a Comment