Golang实现统计文件内容的字符,数字,符号数量

aside section ._1OhGeD · · 747 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

废话不多说,直入主题
今天学习了通过Golang语言实现了统计文件内容中的字符,空格,数字,符号的数量, 当然也可以用来统计更多,例如:统计汉字,大写/小写字母等...仅需要更改部分代码即可.

知识点总结

代码实现前的思路分析:

  • 打开一个文件,创建一个reader
  • 每读取一行,就去统计该行有多少个字符,数字,空格等数量
  • 然后将统计的数量储存到一个结构体内
  • 引入的包有:bufio, io,os,fmt

源代码参考

package main

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

/*
代码编写思路:
   1- 打开一个文件,创建一个reader
   2- 每读取一行,就去统计该行有多少个字符,数字,空格等数量
   3 - 然后将结果存到一个结构体内
*/

// 定义一个结构体,用于存储统计结果
type CharCount struct {
    ChCount     int
    NumCount    int
    SpaceCount  int
    OthersCount int
}

// main 程序入口
func main() {
    fileName := "E:/Go/code/src/Statistics/mytest.txt"
    file, err := os.Open(fileName)
    if err != nil {
        fmt.Printf("打开文件出错了... err =%v \n", err)
        return
    }

    defer file.Close()

    // 定义一个CharCount的实例
    var Count CharCount

    //创建一个带缓存的reader
    reader := bufio.NewReader(file)

    // 循环读取文件fileName的内容
    for {
        str, err := reader.ReadString('\n')
        if err == io.EOF {
            fmt.Printf("文件内容如读取完成... message = %v \n", err)
            break
        }
        // 遍历前面循环读取到的内容str, 进行统计数量
        for _, v := range str {
            //fmt.Println(v)
            switch {
            case v >= 'a' && v <= 'z':
                fallthrough
            case v >= 'A' && v <= 'Z':
                Count.ChCount++
            case v == ' ' || v == '\t':
                Count.SpaceCount++
            case v >= '0' && v <= '9':
                Count.NumCount++
            default:
                Count.OthersCount++
            }
        }
    }
    // 输出统计结果来看看是否正确
    fmt.Printf("字符数量= %v  数字的个数 = %v 空格的数量是= %v 另外其它字符的个数是= %v",
        Count.ChCount, Count.NumCount, Count.SpaceCount, Count.OthersCount)
}

运行结果参考

源文件 vs 运行结果

备注说明

本文部分内容,图片,及视频来源于网络转载, 不以盈利为目的,不构成商业目的使用, 仅用于学习交流...相关版权归原作者所有。如有异议,请联系我 751749090@qq.com [麦特matt]
将在第一时间作出处理.


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:aside section ._1OhGeD

查看原文:Golang实现统计文件内容的字符,数字,符号数量

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

747 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传