| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- // read_csv.go
- package main
- import (
- "bufio"
- "fmt"
- "io"
- "log"
- "os"
- "strconv"
- "strings"
- )
- type Book struct {
- title string
- price float64
- quantity 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')
- readErr := err
- // 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)
- }
- if readErr == io.EOF {
- break
- }
- }
- fmt.Println("We have read the following books from the file: ")
- for _, bk := range bks {
- fmt.Println(bk)
- }
- }
- /* Output:
- We have read the following books from the file:
- {"The ABC of Go" 25.5 1500}
- {"Functional Programming with Go" 56 280}
- {"Go for It" 45.900001525878906 356}
- {"The Go Way" 55 5}
- */
|