Solution: count words from file



examples/count-words-from-file/count_words_from_file.go
package main

import (
    "bufio"
    "fmt"
    "os"
    "sort"
    "strings"
)

func main() {
    filename := "words_and_spaces.txt"
    fmt.Println(filename)

    fh, err := os.Open(filename)
    if err != nil {
        fmt.Printf("Could not open file '%v': %v", filename, err)
        os.Exit(1)
    }
    reader := bufio.NewReader(fh)
    counter := make(map[string]int)
    for {
        line, _ := reader.ReadString('\n')
        //fmt.Print(line)
        fields := strings.Fields(line)
        //fmt.Println(fields)
        for _, word := range fields {
            word = strings.ToLower(word)
            counter[word]++
        }
        if line == "" {
            break
        }
    }

    // for word, cnt := range counter {
    //     fmt.Printf("%v %v\n", word, cnt)
    // }

    words := make([]string, 0, len(counter))
    for word := range counter {
        words = append(words, word)
    }
    sort.Slice(words, func(i, j int) bool {
        return counter[words[i]] > counter[words[j]]
    })

    for _, word := range words {
        fmt.Printf("%v %v\n", word, counter[word])
    }

}