文件操作4

统计不同类型的字符个数

统计英文、数字、空格和其它字符数量

说明:统计一个文件中含有的英文、数字、空格及其它字符数量。

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

//定义一个结构体,用于保存统计结果
type CharCount struct {
  ChCount int   //记录英文个数
  NumCount int   //记录数字的个数
  SpaceCount int   //记录空格的个数
  OtherCount int   //记录其它字符的个数
}

func main() {

  //思路:打开一个文件,创建一个带缓存的Reader
  //每读取一行,就去统计该行有多少个 英文、数字、空格和其它字符
  //然后将结果保存到一个结构体
  fileName := "e:/重要名字.txt"
  file, err := os.Open(fileName)
  if err != nil {
    fmt.Printf("open file err=%v ", err)
    return
  }
  defer file.Close()
  //定义个chCount实例
  var count CharCount
  //创建一个Reader
  reader := bufio.NewReader(file)

  //开始循环的读取fileName的内容
  for {
    str, err := reader.ReadString(' ')
    if err == io.EOF {
      break
    }

    //为了兼容中文字符,可以将 str 转成 []rune
    str1 := []rune(str)
    //遍历 str 进行统计
    for _, v := range str1 {
      switch {
        case v >= 'a' && v <= 'z':
          fallthrough //穿透
        case v >= 'A' && v <= 'Z':
          count.ChCount++
        case v == ' ' || v == ' ':
          count.SpaceCount++
        case v >= '0' && v <= '9':
          count.NumCount++
        default:
          count.OtherCount++
      }
    }
  }

  //输出统计的结果看看是否正确
  fmt.Printf("字符的个数为=%v 数字的个数为=%v 空格的个数为=%v 其它字符个数为=%v",
  count.ChCount, count.NumCount, count.SpaceCount, count.OtherCount)
}

命令行参数基本使用


看一个需求:

我们希望能够获取到命令行输入的各种参数,该如何处理? 如图:=》命令行参数

基本介绍:

os.Args 是一个string的切片,用来存储所有的命令行参数


应用案例:

请编写一段代码,可以获取命令行各个参数

package main
import (
  "fmt"
  "os"
)

func main() {

  fmt.Println("命令行的参数有", len(os.Args))
  //遍历os.Args切片,就可以得到所有的命令行输入参数值
  for i, v := range os.Args {
    fmt.Printf("args[%v]=%v ", i, v)
  }
}

flag包解析命令行参数

说明:前面的方式是比较原生的方式,对解析参数不是特别的方便,特别是带有指定参数形式的命令行。

比如:cmd>main.exe -f c:/aaa.txt -p 200 -u root 这样的形式命令行,go设计者给我们提供了flag包,可以方便的解析命令行参数,而且参数顺序可以随意

请编写一段代码,可以获取命令行各个参数。

代码演示:

package main
import (
  "fmt"
  "flag"
)

func main() {

  //定义几个变量,用于接收命令行输入的参数值
  var user string
  var pwd string
  var host string
  var port int

  //&user 就是接收用户命令行中输入的 -u 后面的参数值
  //"u",就是 -u 指定参数
  //"",默认值
  //"用户名,默认为空" 说明
  flag.StringVar(&user, "u", "", "用户名,默认为空")
  flag.StringVar(&pwd, "pwd", "", "密码,默认为空")
  flag.StringVar(&host, "h", "localhost", "密码,默认为localhost")
  flag.IntVar(&port, "port", 3306, "端口号,默认为3306")

  //这里有一个非常重要的操作,转换,必须调用该方法
  flag.Parse()

  //输出结果
  fmt.Printf("user=%v pwd=%v host=%v port=%v",
  user, pwd, host, port)
}

输出的结果:

原文地址:https://www.cnblogs.com/green-frog-2019/p/11552189.html