对文件的内容进行统计字母数字中文,并且显示每个结果

package main

import (
	"bufio"
	"fmt"
	"io"
	"log"
	"os"
)

type Count struct {
	Strcount int
	Numcount int
	Other    int
	China    int
}

func main() {
	filename := "./abc.txt"
	file, err := os.Open(filename)
	if err != nil {
		log.Fatal(err)
	}
	var c Count
	//返回带缓冲的reader
	readre := bufio.NewReader(file)
	for {
		//// ReadString读取,直到输入中第一次出现delim,
		//返回一个字符串,该字符串包含分隔符之前的数据,并包含分隔符。
		//如果ReadString在找到分隔符之前遇到错误,
		//它返回在错误之前读取的数据和错误本身(通常是io.EOF)。
		// ReadString返回err != nil,当且仅当返回的数据没有结束
		// delim 意思就是分割
		str, err := readre.ReadString('\n')
		//开始遍历读取的str数据 str底层是byte字节数组
		//我们要判断是不是中文 所以这里转成 rune UTF-8编码 大于255肯定是中文
		for _, v := range []rune(str) {
			switch {
			case v >= 'a' && v <= 'z':
				fallthrough
			case v >= 'A' && v <= 'Z':
				c.Strcount++
			case v >= '0' && v <= '9':
				c.Numcount++
			case v > 255:
				c.China++
			default:
				c.Other++
			}
		}
		//文件读取结束 跳出循环
		if err == io.EOF {
			break
		}
		if err != nil {
			log.Fatal(err)
		}
	}
	fmt.Println("c.Numcoun=", c.Numcount)
	fmt.Println("c.Strcount=", c.Strcount)
	fmt.Println("c.China=", c.China)
	fmt.Println("c.Other=", c.Other)
}

  

posted @ 2019-02-19 16:58  Egrep  阅读(298)  评论(0编辑  收藏  举报