在Go中使用readline进行字符串的惯用方法是什么?标准库中提供的原始函数看起来非常低级,它们返回字节数组.有没有内置的更简单的方法来从readline函数中获取字符串?
Mal*_*olm 13
我写了一种方法来轻松读取文件中的每一行.Readln(*bufio.Reader)函数从底层的bufio.Reader结构返回一行(sans \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
}
Run Code Online (Sandbox Code Playgroud)
您可以使用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)
}
Run Code Online (Sandbox Code Playgroud)
干杯!
pet*_*rSO 11
以下是使用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, isPrefix, err := r.ReadLine()
for err == nil && !isPrefix {
s := string(line)
fmt.Println(s)
line, isPrefix, 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)
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
20967 次 |
最近记录: |