Solution Review: Read CSV File
This lesson discusses the solution to the challenge given in the previous lesson.
We'll cover the following...
We'll cover the following...
Go (1.6.2)
Files
package mainimport ("bufio""fmt""log""io""os""strconv""strings")type Book struct {title stringprice float64quantity int}func main() {bks := make([]Book, 1)file, err := os.Open("products.txt")if err != nil {log.Fatalf("Error %s opening file products.txt: ", err)}defer file.Close()reader := bufio.NewReader(file)for {// read one line from the file:line, err := reader.ReadString('\n')if err == io.EOF {break}// remove \r and \n so 2 in Windows, in Linux only \n, so 1:line = string(line[:len(line)-2])//fmt.Printf("The input was: -%s-", line)strSl := strings.Split(line, ";")book := new(Book)book.title = strSl[0]book.price, err = strconv.ParseFloat(strSl[1], 32)if err!=nil {fmt.Printf("Error in file: %v", err)}//fmt.Printf("The quan was:-%s-", strSl[2])book.quantity, err = strconv.Atoi(strSl[2])if err!=nil {fmt.Printf("Error in file: %v", err)}if bks[0].title == "" {bks[0] = *book} else {bks = append(bks, *book)}}fmt.Println("We have read the following books from the file: ")for _, bk := range bks {fmt.Println(bk)}}
Look at the file products.txt. The first field of each line in the file is a title, the second is a price, and the third is a quantity. Whereas, the columns are separated by a ;
.
Now, look at the file main.go. First, we define a struct of type Book
at line 13. It contains the fields according to the specifications of the data in our file: title
, price
, and quality
...