如何解决进入readline->字符串
| 在Go中对字符串进行readline的惯用方式是什么?标准库中提供的原始函数看起来很底层,它们返回字节数组。是否有任何更简单的内置方法可以从readline函数中获取字符串?解决方法
我写了一种轻松读取文件中每一行的方法。 Readln(* bufio.Reader)函数从基础bufio.Reader结构返回一行(无\\ n)。
// Readln returns a single line (without the ending \\n)
// from the input buffered reader.
// An error is returned iff there is an error with the
// buffered reader.
func Readln(r *bufio.Reader) (string,error) {
var (isPrefix bool = true
err error = nil
line,ln []byte
)
for isPrefix && err == nil {
line,isPrefix,err = r.ReadLine()
ln = append(ln,line...)
}
return string(ln),err
}
您可以使用Readln读取文件中的每一行。以下代码读取文件中的每一行,并将每一行输出到stdout。
f,err := os.Open(fi)
if err != nil {
fmt.Println(\"error opening file= \",err)
os.Exit(1)
}
r := bufio.NewReader(f)
s,e := Readln(r)
for e == nil {
fmt.Println(s)
s,e = Readln(r)
}
干杯!
,这是一些使用bufio.ReadLine和bufio.ReadString的示例。
package main
import (
\"bufio\"
\"fmt\"
\"os\"
)
func ReadLine(filename string) {
f,err := os.Open(filename)
if err != nil {
fmt.Println(err)
return
}
defer f.Close()
r := bufio.NewReaderSize(f,4*1024)
line,err := r.ReadLine()
for err == nil && !isPrefix {
s := string(line)
fmt.Println(s)
line,err = r.ReadLine()
}
if isPrefix {
fmt.Println(\"buffer size to small\")
return
}
if err != io.EOF {
fmt.Println(err)
return
}
}
func ReadString(filename string) {
f,err := os.Open(filename)
if err != nil {
fmt.Println(err)
return
}
defer f.Close()
r := bufio.NewReader(f)
line,err := r.ReadString(\'\\n\')
for err == nil {
fmt.Print(line)
line,err = r.ReadString(\'\\n\')
}
if err != io.EOF {
fmt.Println(err)
return
}
}
func main() {
filename := `testfile`
ReadLine(filename)
ReadString(filename)
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。