golang基础-终端读(Scanln\bufio)、bufio文件读、、ioutil读
终端读写Scanln、Sscanfpackage main
import (
"fmt"
)
var (
firstName,lastName,s string
i int
f float32
input = "56.12 / 5212 / Go"
format = "%f / %d / %s"
)
func main() {
fmt.Println("Please enter your full name: ")
fmt.Scanln(&firstName,&lastName)
fmt.Printf("Hi %s %s!n",firstName,lastName) // Hi Chris Naegels
fmt.Sscanf(input,format,&f,&i,&s)
fmt.Println("From the string we read: ",f,i,s)
}
输出如下: PS E:golanggo_prosrcsafly> go run demo.go
Please enter your full name:
hello go lagn
Hi hello go!
From the string we read: 56.12 5212 Go
PS E:golanggo_prosrcsafly>
func Sscanf func Scanln bufio带缓冲区的读ReadString读取换行 package main
import (
"bufio"
"fmt"
"os"
)
var inputReader *bufio.Reader
var input string
var err error
func main() {
inputReader = bufio.NewReader(os.Stdin)
fmt.Println("Please enter some input: ")
input,err = inputReader.ReadString('n')
if err == nil {
fmt.Printf("The input was: %sn",input)
}
}
输出如下: PS E:golanggo_prosrcsafly> go run demo.go
Please enter some input:
wyf
The input was: wyf
PS E:golanggo_prosrcsafly>
bufio文件读(1)1、os.Open package main
import (
"bufio"
"fmt"
"os"
)
func main() {
file,err := os.Open("?output.dat")
if err != nil {
fmt.Println("read file err:",err)
return
}
defer file.Close()
reader := bufio.NewReader(file)
str,err := reader.ReadString('n')
if err != nil {
fmt.Println("read string failed,err:",err)
return
}
fmt.Printf("read str succ,ret:%sn",str)
}
输出如下: PS E:golanggo_prosrcsafly> go run demo.go
read file err: open ?test: The system cannot find the file specified.
PS E:golanggo_prosrcsafly>
运行结果有问题,但是找不出问题所在 bufio文件读(2)练习,从终端读取一行字符串,统计英文、数字、空格以及其他字符的数量。 package main
import (
"bufio"
"fmt"
"io"
"os"
)
type CharCount struct {
ChCount int
NumCount int
SpaceCount int
OtherCount int
}
func main() {
file,err := os.Open("output.dat")
if err != nil {
fmt.Println("read file err:",err)
return
}
defer file.Close()
var count CharCount
reader := bufio.NewReader(file)
for {
str,err := reader.ReadString('n')
//读取完毕
if err == io.EOF {
break
}
//读取失败
if err != nil {
fmt.Printf("read file failed,err:%v",err)
break
}
/* 一个字符串可以可以用一个rune(又名int32)数组来表示, 每个rune都表示一个单一的字符。如: */
runeArr := []rune(str)
for _,v := range runeArr {
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("char count:%dn",count.ChCount)
fmt.Printf("num count:%dn",count.NumCount)
fmt.Printf("space count:%dn",count.SpaceCount)
fmt.Printf("other count:%dn",count.OtherCount)
}
通过ioutil实现读package main
import (
"fmt"
"io/ioutil"
"os"
)
func main() {
inputFile := "products.txt"
outputFile := "products_copy.txt"
buf,err := ioutil.ReadFile(inputFile)
if err != nil {
fmt.Fprintf(os.Stderr,"File Error: %sn",err)
return
}
fmt.Printf("%sn",string(buf))
err = ioutil.WriteFile(outputFile,buf,0x644)
if err != nil {
panic(err.Error())
}
}
在项目下创建2个文件 输出如下: PS E:golanggo_prosrcsafly> go run demo.go
sfds
PS E:golanggo_prosrcsafly>
读取压缩文件1、os.Open压缩文件 package main
import (
"bufio"
"compress/gzip"
"fmt"
"os"
)
func main() {
fName := "output.dat.gz"
var r *bufio.Reader
fi,err := os.Open(fName)
if err != nil {
fmt.Fprintf(os.Stderr,"%v,Can’t open %s: error: %sn",os.Args[0],fName,err)
os.Exit(1)
}
fz,err := gzip.NewReader(fi)
if err != nil {
fmt.Fprintf(os.Stderr,"open gzip failed,err: %vn",err)
return
}
r = bufio.NewReader(fz)
for {
line,err := r.ReadString('n')
if err != nil {
fmt.Println("Done reading file")
os.Exit(0)
}
fmt.Println(line)
}
}
输出如下: PS E:golanggo_prosrcsafly> go run demo.go
hello world!
hello world!
hello world!
hello world!
hello world!
hello world!
hello world!
hello world!
hello world!
hello world!
Done reading file
PS E:golanggo_prosrcsafly>
文件写入文件写入 package main
import (
"bufio"
"fmt"
"os"
)
func main() {
outputFile,outputError := os.OpenFile("output.dat",os.O_WRONLY|os.O_CREATE,0666)
if outputError != nil {
fmt.Printf("An error occurred with file creationn")
return
}
defer outputFile.Close()
outputWriter := bufio.NewWriter(outputFile)
outputString := "hello world!n"
for i := 0; i < 10; i++ {
outputWriter.WriteString(outputString)
}
outputWriter.Flush()
}
文件拷贝简单的三步骤 package main
import (
"fmt"
"io"
"os"
)
func main() {
CopyFile("target.txt","source.txt")
fmt.Println("Copy done!")
}
func CopyFile(dstName,srcName string) (written int64,err error) {
src,err := os.Open(srcName)
if err != nil {
fmt.Println("src open err")
return
}
defer src.Close()
dst,err := os.OpenFile(dstName,0644)
if err != nil {
fmt.Println("dst open err")
return
}
defer dst.Close()
return io.Copy(dst,src)
} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |