猿问

从读取器读取直到到达字符串

我正在尝试编写一个函数来保持从缓冲读取器读取,直到我遇到某个字符串,然后停止读取并返回在该字符串之前读取的所有内容。


换句话说,我想做和之前一样的事情reader.ReadString(),除了使用字符串而不是单个字节。


例如:


mydata, err := reader.ReadString("\r\n.\r\n") //obviously will not compile

我怎样才能做到这一点?


提前致谢,


特威奇


修订 1:以前的尝试

这是我之前的尝试;它写得很糟糕并且不起作用,但希望它展示了我正在尝试做的事情。


func readDotData(reader *bufio.Reader)(string, error){

delims := []byte{ '\r', '\n', '.', '\r', '\n'}

curpos := 0

var buffer []byte

for {

    curpos = 0

    data, err := reader.ReadSlice(delims[0])

    if err!=nil{ return "", err }

    buffer = append(buffer, data...)

    for {

        curpos++

        b, err := reader.ReadByte()

        if err!=nil{ return "", err }

        if b!=delims[curpos]{

            for curpos >= 0{

                buffer = append(buffer, delims[curpos])

                curpos--

            }

            break

        }

        if curpos == len(delims){

            return string(buffer[len(buffer)-1:]), nil

        }

    }

}

panic("unreachable")

}


交互式爱情
浏览 186回答 3
3回答
随时随地看视频慕课网APP

相关分类

Go
我要回答