aggrigate results in main

master
DustyP 5 years ago
parent dd2748d8ae
commit e8d2d2cb59

@ -72,8 +72,66 @@ func main() {
if len(goopt.Args) == 0 {
fmt.Println(goopt.Help())
} else {
if !*fWords && !*fChars && !*fLines && !*fBytes && !*fMaxLineLength {
*fWords = true
*fChars = false
*fLines = true
*fBytes = true
*fMaxLineLength = false
}
var TotalCounts wc.Counter
for _, a := range goopt.Args {
wc.Count(a, *fWords, *fChars, *fLines, *fBytes, *fMaxLineLength)
count, err := wc.Count(a, *fWords, *fChars, *fLines, *fBytes, *fMaxLineLength)
if err == nil {
TotalCounts.Lines += count.Lines
TotalCounts.Bytes += count.Bytes
TotalCounts.Words += count.Words
TotalCounts.Chars += count.Chars
TotalCounts.MaxLineLength += count.MaxLineLength
if *fLines {
fmt.Printf("%d", count.Lines)
}
fmt.Printf(" ")
if *fWords {
fmt.Printf("%d", count.Words)
}
fmt.Printf(" ")
if *fChars {
fmt.Printf("%d", count.Chars)
}
fmt.Printf(" ")
if *fBytes {
fmt.Printf("%d", count.Bytes)
}
fmt.Printf(" ")
if *fMaxLineLength {
fmt.Printf("%d", count.MaxLineLength)
}
fmt.Printf(" %s\n", a)
}
}
if len(goopt.Args) > 1 {
if *fLines {
fmt.Printf("%d", TotalCounts.Lines)
}
fmt.Printf(" ")
if *fWords {
fmt.Printf("%d", TotalCounts.Words)
}
fmt.Printf(" ")
if *fChars {
fmt.Printf("%d", TotalCounts.Chars)
}
fmt.Printf(" ")
if *fBytes {
fmt.Printf("%d", TotalCounts.Bytes)
}
fmt.Printf(" ")
if *fMaxLineLength {
fmt.Printf("%d", TotalCounts.MaxLineLength)
}
fmt.Println(" total")
}
}
}

@ -4,6 +4,7 @@ import (
"fmt"
"io"
"os"
"runtime"
"unicode/utf8"
)
@ -17,25 +18,18 @@ type Counter struct {
MaxLineLength int64
}
func Count(filename string, cw, cc, cl, cb, mll bool) {
if !cw && !cc && !cl && !cb && !mll {
cw = true
cc = false
cl = true
cb = true
mll = false
}
func Count(filename string, cw, cc, cl, cb, mll bool) (Counter, error) {
file, err := os.Open(filename)
if err != nil {
fmt.Println(err)
return
return Counter{}, err
}
defer file.Close()
processLine := cw || cc
var c = &Counter{}
numWorkers := 2 //runtime.NumCPU()
numWorkers := runtime.NumCPU()
if cl && !processLine {
c.Lines = CountLines(file, numWorkers)
@ -48,27 +42,11 @@ func Count(filename string, cw, cc, cl, cb, mll bool) {
fi, err := file.Stat()
if err != nil {
fmt.Println(err)
return
return Counter{}, err
}
c.Bytes = fi.Size()
}
if cl {
fmt.Printf("%d ", c.Lines)
}
if cw {
fmt.Printf("%d ", c.Words)
}
if cc {
fmt.Printf("%d ", c.Chars)
}
if cb {
fmt.Printf("%d ", c.Bytes)
}
if mll {
fmt.Printf("%d ", c.MaxLineLength)
}
fmt.Printf("%s\n", filename)
return *c, nil
}
func CountLines(file *os.File, numWorkers int) int64 {

Loading…
Cancel
Save