文件操作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\n", err)
return
}
defer file.Close()
//定义个chCount实例
var count CharCount
//创建一个Reader
reader := bufio.NewReader(file)
//开始循环的读取fileName的内容
for {
str, err := reader.ReadString('\n')
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 == '\t':
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\n", 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)
}
输出的结果: