doubi4340 2013-07-29 05:54
浏览 16
已采纳

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

I am trying to write a function to keep reading from a buffered reader until I hit a certain string, then to stop reading and return everything read prior to that string.

In other words, I want to do the same thing as reader.ReadString() does, except taking a string instead of a single byte.

For instance:

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

How can I do this?

Thanks in advance,

Twichy

Amendment 1: Previous attempt

Here is my previous attempt; its badly written and doesnt work but hopefully it demonstrates what I am trying to do.

func readDotData(reader *bufio.Reader)(string, error){
delims := []byte{ '', '
', '.', '', '
'}
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")
}
  • 写回答

4条回答 默认 最新

  • duanhuokuang5280 2013-07-29 08:42
    关注

    http://play.golang.org/p/BpA5pOc-Rn

    package main
    
    import (
        "bytes"
        "fmt"
    )
    
    func main() {
        b := bytes.NewBuffer([]byte("Hello, playground!
    .
    Irrelevant trailer."))
        c := make([]byte, 0, b.Len())
        for {
            p := b.Bytes()
            if bytes.Equal(p[:5], []byte("
    .
    ")) {
                fmt.Println(string(c))
                return
            }
            c = append(c, b.Next(1)...)
    
        }
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥15 拟通过pc下指令到安卓系统,如果追求响应速度,尽可能无延迟,是不是用安卓模拟器会优于实体的安卓手机?如果是,可以快多少毫秒?
  • ¥20 神经网络Sequential name=sequential, built=False
  • ¥16 Qphython 用xlrd读取excel报错
  • ¥15 单片机学习顺序问题!!
  • ¥15 ikuai客户端多拨vpn,重启总是有个别重拨不上
  • ¥20 关于#anlogic#sdram#的问题,如何解决?(关键词-performance)
  • ¥15 相敏解调 matlab
  • ¥15 求lingo代码和思路
  • ¥15 公交车和无人机协同运输
  • ¥15 stm32代码移植没反应