Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package main
- import (
- "bufio"
- "bytes"
- "fmt"
- "io"
- "os"
- "strings"
- )
- const filePath string = "./data/users.txt"
- //easyjson:json
- type User struct {
- Name string `json:"name"`
- Email string `json:"email"`
- Browsers []string `json:"browsers"`
- }
- // Only for easyjson generation
- func main() {
- u := &User{}
- u.UnmarshalJSON([]byte(`{"browsers":["Mozilla","Second","Linux"],
- "company":"Flashpoint",
- "country":"Dominican Republic",
- "email":"JonathanMorris@Muxo.edu",
- "job":"Programmer",
- "name":"Sharon Crawford",
- "phone":"176-88-49"}`))
- fmt.Println(u)
- }
- // Fastest IntToStr
- func String(i int) string {
- buf := [11]byte{}
- pos := len(buf)
- signed := i < 0
- if signed {
- i = -i
- }
- for {
- pos--
- buf[pos], i = '0'+byte(i%10), i/10
- if i == 0 {
- if signed {
- pos--
- buf[pos] = '-'
- }
- return string(buf[pos:])
- }
- }
- }
- func FastSearch(out io.Writer) {
- var q struct{}
- var buffer bytes.Buffer
- file, err := os.Open(filePath)
- defer file.Close()
- if err != nil {
- panic(err)
- }
- user := &User{}
- seenBrowsers := make(map[string]struct{}, 0)
- scanner := bufio.NewScanner(file)
- buffer.WriteString("found users:\n")
- idx := 0
- for scanner.Scan() {
- err := user.UnmarshalJSON(scanner.Bytes())
- if err != nil {
- panic(err)
- }
- isAndroid := false
- isMSIE := false
- for _, browser := range user.Browsers {
- if strings.Contains(browser, "Android") {
- isAndroid = true
- if _, ok := seenBrowsers[browser]; !ok {
- seenBrowsers[browser] = q
- }
- }
- if strings.Contains(browser, "MSIE") {
- isMSIE = true
- if _, ok := seenBrowsers[browser]; !ok {
- seenBrowsers[browser] = q
- }
- }
- }
- if isAndroid && isMSIE {
- email := strings.Replace(user.Email, "@", " [at] ", -1)
- buffer.WriteString("[" + String(idx) + "] " + user.Name + " <" + email + ">\n")
- }
- idx++
- }
- buffer.WriteString("\nTotal unique browsers " + String(len(seenBrowsers)))
- fmt.Fprintln(out, buffer.String())
- }
Add Comment
Please, Sign In to add comment