package main
import (
"fmt"
"bufio"
"io"
"os"
"flag"
"strconv"
)
// 使用命令行 -in 默认为infile
var in *string = flag.String("in", "infile", "input file name ...")
var out *string = flag.String("out", "outfile", "output file name ...")
func main() {
// 解析命令行
flag.Parse()
defer func() {
// 如果发现异常...
if ex := recover();nil!=ex {
fmt.Println(ex)
}
}()
value, err := read()
if nil != err {
// 抛出异常
panic(err)
}
write(value)
}
func write(value []int) (err error) {
// 创建文件
file, err2 := os.Create(*out)
if nil != err2 {
err = err2
fmt.Println("error to create file...")
return
}
// 不管怎么着,最后都关闭文件
defer file.Close()
for _, res := range value {
// 将int类型转化成string
str := strconv.Itoa(res+2)
// 将string写入file中
file.WriteString(str + "\n")
}
return nil
}
func read() (result []int, err error) {
// 打开文件
file, err1 := os.Open(*in)
if nil != err1 {
err = err1
return
}
// 不管怎么着,最后都关闭文件
defer file.Close()
// 从文件创建一个bufferreader
br := bufio.NewReader(file)
// 初始化一个数组切片
result = make([]int, 0)
// 死循环
for {
// 一行一行的读
line, isPrefix, err2 := br.ReadLine()
if nil != err2 {
// 读到文件结尾
if io.EOF == err2 {
fmt.Println("finish read ...")
}
return
}
if isPrefix {
break
}
// 将字符数组转化成字符串
str := string(line)
// 将字符串转化成int
value, err3 := strconv.Atoi(str)
if nil != err3 {
err = err3
break
}
// 像切片中追加
result = append(result, value)
}
// 返回结果
return
}
转载于:https://my.oschina.net/qibin/blog/323340