add: maps project — log parser
This commit is contained in:
		
							
								
								
									
										32
									
								
								23-project-log-parser/01-scanning/main.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								23-project-log-parser/01-scanning/main.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,32 @@
 | 
			
		||||
// For more tutorials: https://blog.learngoprogramming.com
 | 
			
		||||
//
 | 
			
		||||
// Copyright © 2018 Inanc Gumus
 | 
			
		||||
// Learn Go Programming Course
 | 
			
		||||
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bufio"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"os"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	// Create a new scanner that scans from the standard-input
 | 
			
		||||
	in := bufio.NewScanner(os.Stdin)
 | 
			
		||||
 | 
			
		||||
	// Stores the total number of lines in the input
 | 
			
		||||
	var lines int
 | 
			
		||||
 | 
			
		||||
	// Scan the input line by line
 | 
			
		||||
	for in.Scan() {
 | 
			
		||||
		lines++
 | 
			
		||||
 | 
			
		||||
		// Get the current line from the scanner's buffer
 | 
			
		||||
		// fmt.Println("Scanned Text :", in.Text())
 | 
			
		||||
		// fmt.Println("Scanned Bytes:", in.Bytes())
 | 
			
		||||
	}
 | 
			
		||||
	fmt.Printf("There %d lines.\n", lines)
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										4
									
								
								23-project-log-parser/01-scanning/proverbs.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										4
									
								
								23-project-log-parser/01-scanning/proverbs.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,4 @@
 | 
			
		||||
Go Proverbs
 | 
			
		||||
Make the zero value useful
 | 
			
		||||
Clear is better than clever
 | 
			
		||||
Errors are values
 | 
			
		||||
							
								
								
									
										11
									
								
								23-project-log-parser/02-project-file-parser/log.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										11
									
								
								23-project-log-parser/02-project-file-parser/log.txt
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,11 @@
 | 
			
		||||
learngoprogramming.com 10
 | 
			
		||||
learngoprogramming.com 5
 | 
			
		||||
learngoprogramming.com 
 | 
			
		||||
learngoprogramming.com 20
 | 
			
		||||
golang.org 4
 | 
			
		||||
golang.org 6
 | 
			
		||||
golang.org 5
 | 
			
		||||
golang.org 10
 | 
			
		||||
blog.golang.org 5
 | 
			
		||||
blog.golang.org 20
 | 
			
		||||
blog.golang.org 10
 | 
			
		||||
							
								
								
									
										65
									
								
								23-project-log-parser/02-project-file-parser/main.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								23-project-log-parser/02-project-file-parser/main.go
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,65 @@
 | 
			
		||||
// For more tutorials: https://blog.learngoprogramming.com
 | 
			
		||||
//
 | 
			
		||||
// Copyright © 2018 Inanc Gumus
 | 
			
		||||
// Learn Go Programming Course
 | 
			
		||||
// License: https://creativecommons.org/licenses/by-nc-sa/4.0/
 | 
			
		||||
//
 | 
			
		||||
 | 
			
		||||
package main
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"bufio"
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"os"
 | 
			
		||||
	"strconv"
 | 
			
		||||
	"strings"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
func main() {
 | 
			
		||||
	var (
 | 
			
		||||
		// Stores the visits per unique domain
 | 
			
		||||
		sum = make(map[string]int)
 | 
			
		||||
 | 
			
		||||
		// Stores the unique domain names for printing
 | 
			
		||||
		domains []string
 | 
			
		||||
 | 
			
		||||
		in = bufio.NewScanner(os.Stdin)
 | 
			
		||||
	)
 | 
			
		||||
 | 
			
		||||
	// Scan the standard-in line by line
 | 
			
		||||
	for line := 0; in.Scan(); line++ {
 | 
			
		||||
 | 
			
		||||
		// Parse the fields
 | 
			
		||||
		fields := strings.Fields(in.Text())
 | 
			
		||||
		if len(fields) != 2 {
 | 
			
		||||
			fmt.Printf("wrong input: %v (line #%d)\n", fields, line)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		domain, visits := fields[0], fields[1]
 | 
			
		||||
 | 
			
		||||
		// Collect the unique domains
 | 
			
		||||
		if _, ok := sum[domain]; !ok {
 | 
			
		||||
			domains = append(domains, domain)
 | 
			
		||||
		}
 | 
			
		||||
 | 
			
		||||
		// Sum the total visits per domain
 | 
			
		||||
		n, _ := strconv.Atoi(visits)
 | 
			
		||||
		if n < 0 {
 | 
			
		||||
			fmt.Printf("wrong input: %q (line #%d)\n", visits, line)
 | 
			
		||||
			return
 | 
			
		||||
		}
 | 
			
		||||
		sum[domain] += n
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Print the visits per domain
 | 
			
		||||
	var total int
 | 
			
		||||
	for _, domain := range domains {
 | 
			
		||||
		hits := sum[domain]
 | 
			
		||||
 | 
			
		||||
		fmt.Printf("%-25s -> %d\n", domain, hits)
 | 
			
		||||
		total += hits
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	// Print the total visits for all domains
 | 
			
		||||
	fmt.Printf("\n%-25s -> %d\n", "TOTAL", total)
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user