特定の文字列に到達するまでバッファリングされたリーダーから読み取りを続け、読み取りを停止してその文字列の前に読み取ったすべてを返す関数を作成しようとしています。
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")
}